我正在尝试从转发JSONList的AsyncTask填充我的GridView。我有一个运行的数组(列表),我在JSON之外添加了一些项目,然后将返回的JSON数据添加到“列表数组”中。这样做,但它只在GetView方法之后处理。
将其分解为步骤:
class SingleItem
{
int coverId;
String titleId;
SingleItem(int coverId, String titleId) {
Log.e("SingleItem addition", titleId);
this.coverId=coverId;
this.titleId=titleId;
}
}
public class IssuesGrid extends BaseAdapter {
ArrayList<SingleItem> list;
Context ctx;
private static String url = "MY_API_URL";
private static final String issue_id = "issue_id";
private static final String title = "title";
JSONArray issues = null;
public IssuesGrid(Context c) {
ctx = c;
list=new ArrayList<SingleItem>();
int[] coverIds={R.drawable.ic_availableissues,R.drawable.ic_downloadedissues,R.drawable.ic_drawer};
for (int i=0;i<coverIds.length;i++) {
SingleItem tempSingleItem = new SingleItem(coverIds[i],"Test");
list.add(tempSingleItem);
}
new JSONParse().execute();
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int i) {
return list.get(i);
}
@Override
public long getItemId(int i) {
return i;
}
class ViewHolder
{
ImageView myCover;
TextView myTitle;
ViewHolder(View v)
{
myCover = (ImageView) v.findViewById(R.id.issueCover);
myTitle = (TextView) v.findViewById(R.id.issueTitle);
}
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
View row=view;
ViewHolder holder = null;
if (view==null)
{
LayoutInflater inflater = (LayoutInflater) ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
row= inflater.inflate(R.layout.issue, viewGroup, false);
holder=new ViewHolder(row);
row.setTag(holder);
}
else
{
holder = (ViewHolder) row.getTag();
}
SingleItem temp = list.get(i);
holder.myCover.setImageResource(temp.coverId);
holder.myTitle.setText(temp.titleId);
return row;
}
private class JSONParse extends AsyncTask<String, String, JSONObject> {
@Override
protected JSONObject doInBackground(String... args) {
JSONParser jParser = new JSONParser();
JSONObject json = jParser.getJSONFromUrl(url);
try {
issues = json.getJSONArray("issues");
for (int i = 0; i < issues.length(); i++) {
JSONObject c = issues.getJSONObject(i);
SingleItem tempSingleItem = new SingleItem(c.getInt(issue_id),c.getString(title));
list.add(tempSingleItem);
}
} catch (JSONException e) {
e.printStackTrace();
}
return json;
}
}
}