java - 如何返回 JsonArray 请求中的变量

标签 java android android-volley

我在方法(函数)中使用 JsonArrayRequest,它返回数字。当我需要它时,我使用函数 JsonArrayRequest。

但有一些问题:函数返回错误的数字,在下面的代码中函数必须返回变量lastNumber,即变量i的最后一个数字。抱歉,如果我的问题很愚蠢,因为我是java和android的新手。

注意,函数在第二次使用时返回lastNumber。我建议第一次的程序不要实现JsonArrayRequest。 我正在关注本教程http://www.androidhive.info/2014/05/android-working-with-volley-library-1/ .任何帮助表示感谢!

public int lastNumber = 0;    
private int makeJsonObjectRequest(int startList,int endList) {
            JsonArrayRequest movieReq = new JsonArrayRequest(url,
                    new Response.Listener<JSONArray>() {
                        @Override
                        public void onResponse(JSONArray response) {
                            Log.d(TAG, response.toString());
                            i = startLsit;
                            while(i < endList) {
                                try {
                                    JSONObject obj = response.getJSONObject(i);
                                    Movie movie = new Movie();

                                  /***** TONS OF CODE  *****/

                                        movieList.add(movie);
                                    }

                                    }
                                } catch (JSONException e) {
                                    e.printStackTrace();

                                }
                              i++;
                              lastNumber = i;
                            }
                            mAdapter.notifyDataSetChanged();
                        }
                    }, new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    VolleyLog.d(TAG, "Error: " + error.getMessage());
                    hidePDialog();
                }
            });
            AppController.getInstance().addToRequestQueue(movieReq);
            return lastNumber
        }

最佳答案

你使用的方法不正确。您必须在网络返回应答后返回lastNumber。所以我建议定义你的函数输出“void”。那么你必须使用网络接口(interface)。我用代码来解释。如下所示:

这是您的界面:

 public interface JsonObjectListener {

        public void onDone(int lastNumber);

        public void onError(String error);
    }

在你的函数中执行以下操作:

    private void makeJsonObjectRequest(int startList, int endList, JsonObjectListener listener) {
            JsonArrayRequest movieReq = new JsonArrayRequest(url,
                    new Response.Listener<JSONArray>() {
                        @Override
                        public void onResponse(JSONArray response) {
                            Log.d(TAG, response.toString());
                            i = startLsit;
                            while(i < endList) {
                                try {
                                    JSONObject obj = response.getJSONObject(i);
                                    Movie movie = new Movie();

                                  /***** TONS OF CODE  *****/

                                        movieList.add(movie);
                                    }

                                    }
                                } catch (JSONException e) {
                                    e.printStackTrace();

                                }
                              i++;
                              lastNumber = i;
                            }
                            mAdapter.notifyDataSetChanged();
                            if(listener!=null)
                                listener.onDone(lastNumber);
                        }
                    }, new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                       if (listener != null)
                            listener.onError(error.getMessage());
                }
            });
            AppController.getInstance().addToRequestQueue(movieReq);

        }

然后当你想使用它时,如下所示调用它:

makeJsonObjectRequest(your_startList, your_endList, new JsonObjectListener() {
            @Override
            public void onDone(int lastNumber) {
                /// Do every thing you want with lastNumber
            }

            @Override
            public void onError(String error) {
                hidePDialog();
            }
        });
  }

关于java - 如何返回 JsonArray 请求中的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36126466/

相关文章:

代码自动完成时 Android Studio 崩溃

java - Volley.NoConnectionError : java. io.EOFException 0

java - "setenforce 0"如何以及为什么允许 Java 7 运行?

Android Facebook 使用 LoginManager & 设置权限

java - 就地交换逻辑在快速排序中不起作用,但使用临时变量进行交换可以工作。为什么?

android - Android协程相当于Executor服务是什么

java - 使用 Volley 简单请求时的未知类

android - 使用 Volley 发布 JsonObject

java - 实例初始化程序可以抛出异常吗?

java类加载器内存泄漏示例