如何在Retrofit中使用Protobuf转换器

时间:2015-10-14 12:39:39

标签: android protocol-buffers retrofit

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

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

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

1 个答案:

答案 0 :(得分:7)

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

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

  1. 界面 - 定义API调用
  2. 服务 - 构建HTTP请求端点
  3. POJO - 使HTTP请求(通常是GET请求)适应应用程序中的可用数据
  4. 我假设你知道如何处理XML和JSON请求。我使用THIS引用来学习XML的东西。 使用protobuf转换器背后的想法与GSON / simpleXML转换器相同。唯一的区别在于用于调整请求数据的POJO。 Java中protobuf的本质是它已经在某种意义上被设置为POJO。

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

    作为示例,我将使用Google site上的协议缓冲区文档中的 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。