2015-10-14 87 views
2

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

请建议有关如何在Android上使用它retrofit2.0

即使它比标准的XML和JSON更快,更简单,为什么开发商没有得到利用它的一些想法?

+0

我知道这个问题前一段时间问过,有没有进展?但由于没有答案,我想我可以参加。 你有使用协议缓冲区的经验吗? – mastrgamr

+0

我这样做是为了减少加载大内容所花费的时间,而不是用于项目。我见过Protobuf 2.0有不同的转换器,Protobuf Converter就是其中之一,我没有找到Protobuf Converter的用法 – ABI

回答

5

从我所理解的你所问的问题中,我将给出一个粗略的答案。

的基本设置为在使用的Android改造需要:

  1. 的接口 - 定义API调用
  2. A服务 - 建立HTTP请求端点
  3. POJO - 使HTTP请求(通常为GET请求)适应应用程序内的可用数据

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

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

作为一个例子,我将只使用Person protobuf,它位于Google site的Protocol Buffers文档中。

一步一步:

第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。