从和适配器的项目中获取ImageView时获取null。为什么?

时间:2016-05-04 21:55:00

标签: android listview android-arrayadapter android-imageview

我获取文本,添加到ListView,然后获取图像,但在尝试从适配器内的项目获取ImageView以设置图像时获取null。我做错了什么?

//AsyncTask For Texts.
private class pgData extends AsyncTask<String, String, JSONArray> {

//CODES HERE ARE WORKING FINE...

    protected void onPostExecute(JSONArray result) {

       //CODES HERE ARE WORKING FINE...

       lv = (ListView) findViewById(R.id.listView);
       lv.setAdapter(adapter);
       new Image().execute();//Executing Async Task For Image
    }
}

//AsyncTask For Image.
private class Image extends AsyncTask<String, String, JSONArray> {

        //CODES HERE ARE WORKING FINE...

    protected void onPostExecute(JSONArray result) {
            String img;
            ImageView imv;
            l = result.length();
            JSONObject jsonObject;
            for (int i = 0; i < l; i++) {
                try {
                    jsonObject = result.getJSONObject(i);
                    img = "\n" + jsonObject.getString("image1") + "\n";
                    rawImage=Base64.decode(img, Base64.DEFAULT);
                    bmp = BitmapFactory.decodeByteArray(rawImage, 0, rawImage.length);

                    imv=adapter.getItem(i).imageview; //Getting null in imv
                    imv.setImageBitmap(bmp); //Thus this creates null pointer exception

                    adapter.notifyDataSetChanged();
                } catch (Exception e) {
                    Toast.makeText(getBaseContext(), e.toString(), Toast.LENGTH_LONG).show();
                }
            }
    }
}

2 个答案:

答案 0 :(得分:1)

我终于明白了! 而不是:

imv=adapter.getItem(i).imageview;

代码必须是:

imv = (ImageView) lv.getChildAt(i).findViewById(R.id.image1);

答案 1 :(得分:0)

我建议您使用单独的库来下载图片,例如Piccasso或UniversalImageLoader。