我有一个显示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了。
如果有人可以帮助我,我将不胜感激。
答案 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));
}