2015-10-14 3 views
2

Я читал, что protocol buffer (protobuf) является нейтральным по отношению к нейтрали, платформенный нейтральный расширяемый механизм для сериализации структурированных данных. Я хочу использовать его с retrofit2.0. Я не вижу каких-либо модифицированных примеров, используя protobuf конвертер.Как использовать преобразователь Protobuf в дооснащении

Просьба предложить некоторые идеи о том, как использовать его в андроида с retrofit2.0

Несмотря на то, что это быстрее и проще, чем стандартный XML и JSON, почему разработчики не получают использовать его?

+0

Я знаю, что этот вопрос задавали некоторое время назад, какой-то прогресс? Но так как ответов нет, я решил, что могу перезвонить. У вас есть опыт работы с буферами протокола? – mastrgamr

+0

Я сделал это с любопытством, чтобы сократить время, затрачиваемое на загрузку большого контента, не используемого для проектов. Я видел, что Protobuf 2.0 имеет разные конвертеры, Protobuf Converter является одним из них, я не нашел использования Protobuf Converter – ABI

ответ

5

Из чего я понимаю, что вы просите, я дам грубый ответ.

Базовый набор для использования Дооснащения в Android требует:

  1. An Interface - определить API вызовов
  2. A Service - для создания запроса HTTP оконечных
  3. POJO - для адаптации HTTP-запроса (обычно запроса GET) к полезным данным в приложении

Я предполагаю, что вы знаете, как обрабатывать запросы XML и JSON. Я использовал ссылку THIS, чтобы узнать материал XML. Идея использования преобразователя protobuf такая же, как преобразователи GSON/simpleXML. Единственное различие заключается в том, что POJO используется для адаптации данных запроса. Характер protobuf в Java заключается в том, что он уже настроен в некотором смысле как POJO.

При выполнении ваших асинхронных/синхронных запросов ответ возвращается в классе Response, а информация находится в методе ответа body().

В качестве примера я просто использую Лицо protobuf, которое находится в документации для буферов протокола на Google site.

Шаг за шагом:

Шаг 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

Допустим, у вас есть скомпилированный файл класса Java protobuf с именем PersonProto.java. Это будет ваше ПОЖО. (Это было легко)

Наконец, выполнить асинхронный вызов (скажем, в классе 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"); 
     } 
    }); 
} 

Надежда это ответило на ваш вопрос, я как бы бросил его вместе ТБМ.

Смежные вопросы