这里的问题是关于了解
asynchronous任务如何工作的。当您向
volley队列添加请求时,该请求将在 后台线程
(不在主线程中)中运行,并且控制权将传递到下一行。
因此,在此之后:
Volley.newRequestQueue(getActivity()).add(mealsrequest);
控制传递给此:
ArrayList<String> strs=new ArrayList<String>();String mealsnames[]=new String[meals.size()];
现在,由于
meals在后台线程上进行了更新,因此您无法在控件到达时获取数据
String mealsnames[]=newString[meals.size()];
因此,您将在此处获得 零 大小(
meals.size())。
尝试将这部分代码移入
onResponse。
尝试这样:
public void updateData(){ ArrayList<String> strs=new ArrayList<String>(); String mealsnames[]=new String[meals.size()]; for(int i=0;i<meals.size();i++)strs.add(meals.get(i).getName()); strs.toArray(mealsnames); Log.i("debug","meals ou size "+meals.size()); CustomList adapter = new CustomList(getActivity(),mealsnames,meals); List = (ListView)view.findViewById(R.id.list); List.setAdapter(adapter);}并从以下方法调用此方法
onResponse:
@Overridepublic void onResponse(String response) { try{ JSonObject object= new JSonObject(response); JSonArray mealsArray = object.getJSonArray("result"); for(int i=0;i<mealsArray.length();i++){ JSonObject cur = mealsArray.getJSonObject(i); int id= cur.getInt("id"); String name= cur.getString("name"); String description = cur.getString("description"); int price = cur.getInt("price"); meals.add(new meal(id,name,price,description)); } Log.i("debug","meals size = "+meals.size()); updateData(); } catch(JSonException e){ e.printStackTrace(); }}


