2015-10-14 90 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。