使用jsonArrayRequest从JSON获取数据 [英] Fetching data from json using jsonArrayRequest
问题描述
我正在尝试使用JsonArrayRequest检索json数据.这是我的代码
I'm trying to retrieve json data using JsonArrayRequest.Here's my code for doing that
public class QuestionDetailFragment extends Fragment {
private static final String url = "http://10.0.2.2:80/forumtest/readquestion.php?format=json";
private String data;
RequestQueue requestQueue;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.question_details_layout, container, false);
readQuestionDetails();
Log.d("user","data:"+data);
return view;
}
private void readQuestionDetails() {
requestQueue = Volley.newRequestQueue(getActivity().getApplicationContext());
JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(Request.Method.POST, url, new Response.Listener<JSONArray>() {
@Override
public void onResponse(JSONArray response) {
try {
for (int i=0;i<response.length();i++) {
JSONObject jsonObject = response.getJSONObject(i);
data=jsonObject.getString("user");
}
} catch (JSONException e) {
e.printStackTrace();
Log.e("user",e.getMessage());
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.e("user", error.getMessage());
}
});
requestQueue.add(jsonArrayRequest);
}
}
问题在于,当我在循环内使用数据变量时,它会返回所需的值,但是每当我尝试在循环外使用数据变量时(例如,当我使用onCreateView中的数据时),它会返回空值.
The problem is that when i use data variable inside the loop it returns the required value, but whenever i try to use the data variable outside the loop(let's say when i use data from onCreateView) it returns null value.
推荐答案
那是因为将JsonArrayRequest添加到了异步执行任务的齐射队列中.因此,即使您在readQuestionDetails()
之后调用Log.d("tag","data:"+data);
,请求仍未执行,这意味着data
为空.
Thats because the JsonArrayRequest is being added to the volley queue which executes task asynchronously. So even though you are calling the Log.d("tag","data:"+data);
after readQuestionDetails()
the request has not executed yet, meaning data
is null.
类似的事情会起作用:
public class QuestionDetailFragment extends Fragment {
private static final String url = "http://10.0.2.2:80/forumtest/readquestion.php?format=json";
private String data;
RequestQueue requestQueue;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.question_details_layout, container, false);
readQuestionDetails();
return view;
}
private void readQuestionDetails() {
requestQueue = Volley.newRequestQueue(getActivity().getApplicationContext());
JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(Request.Method.POST, url, new Response.Listener<JSONArray>() {
@Override
public void onResponse(JSONArray response) {
try {
for (int i=0;i<response.length();i++) {
JSONObject jsonObject = response.getJSONObject(i);
data=jsonObject.getString("user");
printData(data);
}
} catch (JSONException e) {
e.printStackTrace();
Log.e("user",e.getMessage());
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.e("user", error.getMessage());
}
});
requestQueue.add(jsonArrayRequest);
}
private void printData(String data){
Log.d("user","data:"+data);
}
}
这篇关于使用jsonArrayRequest从JSON获取数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!