结合异步任务JSON和GridView

时间:2014-07-15 15:58:59

标签: android gridview android-asynctask

我正在尝试从转发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;
          }

        }

}

0 个答案:

没有答案