将json取入片段时遇到问题

时间:2018-04-16 07:21:00

标签: android

我无法将json数据提取到片段中,我需要帮助。我不知道我哪里出错了。

public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

        View v = inflater.inflate(R.layout.crime_fragment,container);
        RecyclerView rv = (RecyclerView)v.findViewById(R.id.recyclerCrime);
        //gives the context of the parent activity
        rv.setLayoutManager(new LinearLayoutManager(this.getActivity()));
        rv.setAdapter(new OtherAdapter(this.getActivity(),fetchJSon()));
        MySingleton.getInstance(this.getContext()).addToRequestQueue(stringRequest);
        return v;
    }

    private ArrayList<ListItem> fetchJSon() {

       final ArrayList<ListItem> items = new ArrayList<ListItem>();
       stringRequest = new StringRequest(Request.Method.GET, urlData, new Response.Listener<String>() {
            @Override
            public void onResponse(String response) {

                try {

                    JSONArray jsonArray = new JSONArray(response);

                    for(int i = 0;i<jsonArray.length();i++){

                        JSONObject jsonObject = jsonArray.getJSONObject(i);
                        ListItem listItem = new ListItem(jsonObject.getString("name"),jsonObject.getString("createdBy"),jsonObject.getString("imageUrl"));

                        items.add(listItem);

                    }

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



            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {

            }
        });

        return items;

    }

1 个答案:

答案 0 :(得分:2)

StringRequest发送异步请求,这意味着响应在几秒钟后返回主线程。但在此期间主线程读取其他代码块。

所以你必须先发送请求。当响应成功时,您可以填写列表。

    View v = inflater.inflate(R.layout.crime_fragment, container);
    RecyclerView rv = (RecyclerView) v.findViewById(R.id.recyclerCrime);
     //gives the context of the parent activity 

    fetchJSon(rv);

    return v;

    }

    private void fetchJSon(final RecyclerView rv) {

        final ArrayList < ListItem > items = new ArrayList < ListItem > ();
        stringRequest = new StringRequest(Request.Method.GET, urlData, new Response.Listener < String > () {@
            Override
            public void onResponse(String response) {
                try {
                    JSONArray jsonArray = new JSONArray(response);
                    for (int i = 0; i < jsonArray.length(); i++) {
                        JSONObject jsonObject = jsonArray.getJSONObject(i);
                        ListItem listItem = new ListItem(jsonObject.getString("name"), jsonObject.getString("createdBy"), jsonObject.getString("imageUrl"));
                        items.add(listItem);
                    }

                    rv.setLayoutManager(new LinearLayoutManager(this.getActivity()));
                    rv.setAdapter(new OtherAdapter(this.getActivity(),items));

                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }
        }, new Response.ErrorListener() {@
            Override
            public void onErrorResponse(VolleyError error) {}
        });

        MySingleton.getInstance(this.getContext()).addToRequestQueue(stringRequest);
    }