使用jsonArrayRequest从JSON获取数据 [英] Fetching data from json using jsonArrayRequest

查看:254
本文介绍了使用jsonArrayRequest从JSON获取数据的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆