android – 如何在Retrofit中使用Protobuf转换器

我读到protocol buffer (protobuf)是语言中立的,平台中立的可扩展机制,用于序列化结构化数据.我想用retrofit2.0来使用它.我没有看到使用protobuf转换器的任何改进示例.

请通过retrofit2.0建议一些关于如何在android中使用它的想法

即使它比标准的XML和JSON更快更简单,为什么开发人员不能使用它呢?

解决方法:

根据我的理解你会问我将给出一个粗略的答案.

在Android中使用Retrofit的基本设置要求:

>接口 – 定义API调用
>服务 – 构建HTTP请求端点
> POJO – 使HTTP请求(通常是GET请求)适应应用程序中的可用数据

我假设你知道如何处理XML和JSON请求.我使用THIS参考来学习XML的东西.
使用protobuf转换器背后的想法与GSON / simpleXML转换器相同.唯一的区别在于用于调整请求数据的POJO. Java中protobuf的本质是它已经在某种意义上被设置为POJO.

执行异步/同步请求时,响应将在Response类中返回,并且信息位于响应的body()方法中.

作为一个例子,我将使用Google site上的Protocol Buffers文档中的Person protobuf.

一步步:

第1步 – 界面

  public interface IPersonService {
    @GET("/api/v1.0/person/{personId}")
    Call<PersonProto> getPerson(String personId);
  }

第2步 – 服务

private IPersonService setupAdapter() {
    Retrofit retrofit = new Retrofit.Builder()
            .baseUrl(API_URL_STRING)
            .addConverterFactory(ProtoConverterFactory.create())
            .build();
    return retrofit.create(IPersonService.class);
}

第3步 – POJO

假设您有一个名为PersonProto.java的已编译的protobuf Java类文件.这将是你的POJO. (那很简单)

最后,执行异步调用(例如,在MainActivity类中):

public void getUser(String personId) {

   setupAdapter().getPerson(personId).enqueue(new Callback<PersonProto>() {
        @Override
        public void onResponse(Response<PersonProto> response, Retrofit retrofit) {
            Log.i(LOG_TAG, "We hit the server");

            if(response.body() != null) {
                //respoonse.body() is your PersonProto Object
                Log.d(LOG_TAG, reponse.body().getName()); //If you see this, you're all set to consume your API
            }
        }

        @Override
        public void onFailure(Throwable t) {
            Log.e(LOG_TAG, "We did not hit the server");
        }
   });
}

希望这能回答你的问题,我有点把它扔到一起tbh.

上一篇:android – 将模拟Retrofit API服务实例注入ActivityInstrumentTestCase2


下一篇:android – Retrofit 2 – 是否有可能获得我发送和接收的JSON的大小?