我无法将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;
}
答案 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);
}