我试图获取我用于旋转器的JSONArray长度值,但即使旋转器的值大于0,它也始终返回0.这是我的代码
类ConfigJSON
public class ConfigJSON {
public static int value;
public static final String JSON_ARRAY = "result";
}
主要活动
protected void onCreate{
getData();
new UpdateUser.GetUserInfo(UpdateUser.this).execute();
}
public void getData() {
StringRequest stringRequest = new StringRequest(url, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
JSONObject j = null;
try {
j = new JSONObject(response);
result = j.getJSONArray(ConfigJSON.JSON_ARRAY);
ConfigJSON.value = result.length();
} catch (JSONException e) {
e.printStackTrace();
}
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
});
RequestQueue requestQueue = Volley.newRequestQueue(this);
requestQueue.add(stringRequest);
}
private class GetUserInfo extends AsyncTask<Void, Void, Void> {
//Do Stuff before PostExecute
@Override
protected void onPostExecute(Void result) {
//The textview will output the JSONArray length
TextView msg = (TextView) findViewById(R.id.txtmsg);
msg.setText(Integer.toString(ConfigJSON.value));
int index;
for (int i=0;i<ConfigJSON.value;i++){
if (spinner.getItemAtPosition(i).toString().equals("stuff")){
index = i;
spinner.setSelection(index);
}
}
}
}
这段代码的重点是获取JSONArray值,这样我就可以在spinner中有一个循环到setSelection但是值总是为0,所以微调器总是会选择第一个值。我像这样更改循环中的值来测试setSelection是否被破坏
for (int i=0;i<3;i++){
if (spinner.getItemAtPosition(i).toString().equals("stuff")){
index = i;
spinner.setSelection(index);
}
}
微调器工作正常,所以我删除
new UpdateUser.GetUserInfo(UpdateUser.this).execute();
在onCreate中并将其放在getData
中public void getData() {
//Same as the getData above but only this line at the end
new UpdateUser.GetUserInfo(UpdateUser.this).execute();
}
因为我想确保在设置getData的值之后运行GetUserInfo。但即使getData中有3个值,它仍会返回0。那么如何获取result.length()值并在GetUserInfo中使用它?
答案 0 :(得分:2)
我想确保GetUserInfo将在值之后运行 getData已设置
Volley网络呼叫是异步的,因此在网络呼叫完成后执行任务,如
public void getData() {
StringRequest stringRequest = new StringRequest(url, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
JSONObject j = null;
try {
j = new JSONObject(response);
result = j.getJSONArray(ConfigJSON.JSON_ARRAY);
ConfigJSON.value = result.length();
new UpdateUser.GetUserInfo(UpdateUser.this).execute();
//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
} catch (JSONException e) {
e.printStackTrace();
}
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
});
RequestQueue requestQueue = Volley.newRequestQueue(this);
requestQueue.add(stringRequest);
}