调用setAdapter后,ArrayList值消失了

时间:2014-12-07 21:20:34

标签: android gridview android-asynctask adapter

我有一个显示gridview的android应用程序,有两个类,一个是GridActivity,另一个是GridActivityAdapter。我在AsyncTask方法中读取了一个json文件,并将json项添加到ArrayList中。问题是我需要在我的适配器中使用此ArrayList的数据,在设置适配器之前,此ArrayList的大小为3但是在设置适配器之后,当我在适配器构造函数中记录它时,大小为0并且我的所有值都在ArrayList消失了!
这是我的GridActivity的代码

public class GridActivity extends Activity{
 public GridView gridView;
 public GridActivityAdaptor adaptorl
 public JsonObject[] jsonObjs;
 public ArrayList<String> urls = new ArrayList<String>();

 protected void onCreate(Bundle savedInstaceState){
 super.onCreate(savedInstanceState);
 setContentView(R.layout.grid_layout);

 new GetJson().execute();
 });
}

private class GetJson extends AsyncTask<Void,Void,Void>
{
 @Override
 protected Void doInBackground(Void... params){
 serviceHandler sh = new ServiceHandler();//handles all http connection parts
 String jsonStr = sh.makeServiceCall(jsonUrl;ServiceHandler.Get);//gets the json data
 if(jsonStr!=null)
 {
  try{
   JSONObject jsonObj = new JSONObject(jsonStr);
   JSONArray jsons = jsonObj.getJSONArray("items");
   jsonObjs = new JSONObject[jsons.length()];
   for(int i=0;i<jsons.length();i++)
   {
    jsonObjs = jsons.getJSONObject(i);
    urls.add(jsonObjs[i].getString("url"));
   }
  }
  catch(JSONException e){
   e.printStackTrace();
  }
 }
 return null;
}

@Override
protected void onPostExecute(Void result){
 super.onPostExecute(result);
 Log.d("appname","urls.size()" + urls.size()); //returns 3 here
 gridView.setAdapter(new GridActivityAdapter(GridActivity.this));
}
}
}

这是GridActivityAdapter的代码:

public class GridActivityAdapter extends BaseAdapter{
 public GridActivity gridActivity;
 public GridActivity(Context c){
  gridActivity = new GridActivity();
  Log.d("appname","urls size: " + gridActivity.urls.size()); //returns 0
 }
 ...
 ...
 ...
 ...
}

当我在setAdapter之前登录时,urls.size()返回3,然后在GridActivityAdapter的构造函数中,同样的日志返回0,我再也不能使用我的ArrayList了。
如果有人可以帮助我,我将不胜感激。

1 个答案:

答案 0 :(得分:1)

试试这个:

适配器中的

public GridActivity(Context c, ArrayList<String> urls){

  Log.d("appname","urls size: " + urls.size());
}

在您的活动中:

@Override
protected void onPostExecute(Void result){
 super.onPostExecute(result);
   Log.d("appname","urls.size()" + urls.size()); 
   gridView.setAdapter(new GridActivityAdapter(GridActivity.this, urls));
}