使用MVP更新Android网络请求的UI

时间:2017-06-24 22:54:55

标签: android mvp okhttp

我正在Android应用中的Repository类中发出网络请求。我这样做是为了学习目的,所以我试图理解,不使用RXJava,我如何从我的存储库一直更新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());
                }

            }
        });
    }
}

2 个答案:

答案 0 :(得分:1)

Imho有两种经典的方法来做这样的事情:

一种方法是将回调对象传递给存储库,并在收到回复时调用回调操作。

第二种(并且更优雅)方式是在您的应用中使用local broadcasts。它们可用于传输消息(例如,如果您的服务中发生了某些事情,并且您想要通知其他线程 - 例如UI线程 - 关于它。)

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

答案 1 :(得分:0)

有一个名为EventBus的库可以很好地处理MVP结构。

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

相关问题