2017-01-24 9 views
0

Я только начал изучать, как использовать RxJava 2 и Retrofit 2 в Android. Я следил за несколькими учебниками, и я могу получить данные с моего сервера. Мой вопрос заключается в том, что является стандартным способом для легкого доступа к этим извлеченным данным. В настоящее время GSON анализирует его на объект, я печатаю toString, но это все.Извлечение данных из объекта Observable с использованием RxJava 2 и дооснащения 2

У меня есть этот интерфейс, чтобы определить мой запрос POST:

public interface FacebookAppLoginService { 
    @POST("app/fbapp_login") 
    Observable<User> getUser(@Body FacebookAccessToken facebookAccessToken); 
} 

я создаю объект Дооснащаемый:

Retrofit retrofit = new Retrofit.Builder() 
      .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) 
      .addConverterFactory(GsonConverterFactory.create()) 
      .baseUrl("http://rocky-garden-56471.herokuapp.com/") 
      .build(); 

Я затем создать объект, чтобы содержать тело JSON запроса моей POST:

FacebookAccessToken facebookAccessToken = new FacebookAccessToken(); 

Затем я создаю наблюдаемое из своего интерфейса:

Observable<User> newUser = facebookAppLoginService.getUser(facebookAccessToken); 

Наконец, я присоединяюсь к наблюдаемым, наблюдая в основном потоке, но делать запрос на рабочий поток (я думаю), то я вхожу результаты:

newUser.subscribeOn(Schedulers.newThread()) 
       .observeOn(AndroidSchedulers.mainThread()) 
       .subscribe(userInfo -> { 
         Log.i("Server Call", "Received: " + userInfo.toString()); 
       }); 

ToString правильно печатает из информации пользователя, полученной от сервера. Каков стандартный способ использования этого объекта, который я получаю в лямбда-функции? Я хотел бы сохранить его в базе данных или, по крайней мере, сохранить его в объекте в рамках действия. Как мне это сделать?

ответ

1

Ваша интерпретация того, что происходит в потоке, верна. Вы делаете запрос в новом потоке, и lambda в subscribe() будет вызываться в UI-потоке

Вы можете просто написать остальную часть кода в лямбда-функции. Вы можете получить доступ к окружающему классу и сохранить его в поле или получить доступ к классу/методу базы данных. Обратите внимание, что вам нужно только наблюдать за основным потоком, если вы хотите получить доступ к ui здесь. Если вы просто хотите его сохранить, вы можете удалить вызов watchOn() и остаться в фоновом потоке. Также я бы рекомендовал использовать Schedulers.io() для subscribeOn(), потому что это threadpool, предназначенный для операций io, включая сетевые операции и доступ к базе данных.

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

  • Нет связанных вопросов^_^