我在方法(函数)中使用 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/