在Volley中更新UI的最有效方法是什么?

时间:2015-07-24 09:07:10

标签: java android user-interface android-volley

最近我在android中使用Volley库..它工作正常但我想知道更新UI的最有效方法..我有一个Utils类,它有所有的Volley方法..现在我传递将作为参数更新的所有视图,但我已经读过我可以在我的活动中实现侦听器,然后将它们作为参数传递给Utils类。

所以我的问题是:

哪个更有效以及为什么要像这样更新UI:

public void getSettings(final TextView exampleView) {
    JsonObjectRequest jsonRequest = new JsonObjectRequest(Method.GET,
            url, (String) null, new Response.Listener<JSONObject>() {
                public void onResponse(JSONObject response) {
                    try {
                        final String setting = getSettingFromJSON(response);
                        exampleView.setText(setting);
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                }
            }, new Response.ErrorListener() {
                public void onErrorResponse(VolleyError arg0) {

                }
            });

    app.add(jsonRequest);
}

或者我在我的活动中声明听众:

    Response.Listener<JSONObject> listener = new Response.Listener<JSONObject>() {
        public void onResponse(JSONObject response) {
            String setting = Utils.getSettingFromJSON(response);
            exampleView.setText(setting);
        }
    };

然后我将它们作为参数传递给我的utils函数,因此调用将是这样的:

utils.getSettings(listener);

而不是:

utils.getSettings(exampleView);

提前致谢:)

2 个答案:

答案 0 :(得分:0)

为什么不使用EventBus之类的东西来管理从请求到活动的回传信息?这样,您就可以将您的网络代码与您的活动/视图分开。使用EventBus和Volley的基本思想如下:

  • 注册一个类以接收某种类型的事件,在这种情况下可能 活动
  • 在此类中创建一个方法来处理此事件, exampleView.setText(setting)
  • 将事件发布到总线,发布字符串或凌空错误 凌空听众。

有关详细示例,请查看此blogpost或Eventbus&#39; github页面。

答案 1 :(得分:0)

正如我的问题Android/Java: how to delay return in a method

我也使用接口监听器,但是,我在主线程中更新视图,而不是在Utils类