2017-06-24 57 views
1

我在Android应用程序的存储库类中发出网络请求。我为了学习目的而这样做,所以我试图了解,而不使用RXJava,我将如何从我的Repository更新UI?使用MVP在Android网络请求上更新UI

调用的线索去像这样MainActivity - >演示 - >交互器 - >库 - >网络

这里是我的存储库中的代码

WeatherRepository { 
    WeatherNetwork network = new WeatherNetwork(); 

    public CurrentWeather getCurrentWeather(float lat, float lng) { 
     network.getDailyWeather(lat, lng, new Callback() { 
      @Override 
      public void onFailure(Request request, IOException e) { 

      } 

      @Override 
      public void onResponse(Response response) throws IOException { 
       try{ 
        String jsonData = response.body().string(); 
        if (response.isSuccessful()) { 
         CurrentWeather currentWeather = getCurrentWeatherData(jsonData); 

        } 
       } catch(JSONException e) { 
        Log.d("DWPresen" + " JSONEXCEPTION", e.getMessage()); 
       } catch(IOException e){ 
        Log.d("DWPresent" + " IOEXCEPTION", e.getMessage()); 
       } 

      } 
     }); 
    } 
} 
+0

我给了一个+1,但你也许应该接受一个答复或写你自己的。 – trocchietto

回答

1

恕我直言,有两种典型的方式做这样的事情:

一种方法是将回调对象传递给存储库并在获得响应时调用回调操作。

第二个(和imho更优雅)的方式是在您的应用程序中使用local broadcasts。他们可以用来传递消息(如你的服务发生了什么,并且你想通知其他线程 - 比如UI线程)。

在android中有很多关于(local) broadcasts的教程。普通广播用于应用程序之间(以及系统和应用程序之间)的通信,而本地广播可用于在应用程序内发送信息。

+0

在这种情况下去了回调路线,但很高兴知道这两个选项! – Rafa

0

有一个名为EventBus的库,与MVP结构非常相配。

简而言之,它将事件(包含数据的对象)从一个类传递到另一个类。在你的情况下,你可以将其中的CurrentWeather对象从Repository传递给Presenter,然后更新UI。