ленивая загрузка изображений с макетом inflater - PullRequest
0 голосов
/ 19 декабря 2011

Я новичок в Android, поэтому ищу помощь по этому

что я пытаюсь сделать:

Я загружаю XML-файл, загружаю его в объект и отображаю его с использованием инфлятора макета.

в xml есть ссылка на изображение, затем я пытаюсь запустить отдельную асинхронную задачу для отложенной загрузки изображений по указанной ссылке. XML-загрузка работает отлично, это только изображения, с которыми я борюсь. Я думаю, что я почти там. любая помощь будет приветствоваться

мой код:

 class MyRowAdapter extends ArrayAdapter<XMLItem> {
     Activity context;

     MyRowAdapter (Activity context) {
         super(context, R.layout.news_row, items);
         this.context=context;
     }
 public View getView(int position, View convertView, ViewGroup parent) {

     View row = convertView;
     if(row==null){
         LayoutInflater inflater=context.getLayoutInflater();
         row = inflater.inflate(R.layout.news_row, null);
     }
     XMLItem _item = items.get(position);
     rowpos = position;
     Log.v(TAG,""+position);
     TextView headline = (TextView)row.findViewById(R.id.Headline);
     headline.setText(_item.getHeadline());
     TextView imagepath = (TextView)row.findViewById(R.id.Imagepath);
     imagepath.setText(_item.getImagepath());




     try {
        ImageView img = (ImageView) row.findViewById(R.id.storyimage);
        img.setImageBitmap(_item.getBitmap());
     } catch(IndexOutOfBoundsException e) {
        new DownloadImageTask().execute(_item.getImagepath());

     }




     return row;
 }


         }



 private class DownloadImageTask extends AsyncTask<String,Integer,Bitmap>{
        private ImageView img;

        @Override
        protected Bitmap doInBackground(String... urls) {

            Bitmap bmImg = null;


            try {
                URL imageurl = new URL(urls[0]);
                Log.v("imageurl","="+imageurl);
                HttpURLConnection conn= (HttpURLConnection)imageurl.openConnection();
                   conn.setDoInput(true);
                   conn.connect();
                   InputStream is = conn.getInputStream();

                   bmImg = BitmapFactory.decodeStream(is);




              } catch (IOException e) {
                   // TODO Auto-generated catch block
                   e.printStackTrace();
            //HttpURLConnection conn =(HttpURLConnection)imageurl.openConnection();



        }

            return bmImg;
    }

        @Override
        protected void onPostExecute(Bitmap result) {
            // TODO Auto-generated method stub
            XMLItem _item = items.get(rowpos);
            super.onPostExecute(result);
            img.setImageBitmap(result);
            _item.setBitmap(result);
            Log.v("image task","onpostexecute");
            myRowAdapter.notifyDataSetChanged();
                }

            }

Ответы [ 2 ]

0 голосов
/ 19 декабря 2011

Вместо того, чтобы реализовывать отдельную задачу для загрузки изображения с указанного URL, я бы предложил вам реализовать: Android - Как мне лениво загружать изображения в ListView

0 голосов
/ 19 декабря 2011

Я не вижу места, где переменная img инициализируется в DownloadImageTask . Может быть, вы забыли передать его конструктору:

private class DownloadImageTask extends AsyncTask<String,Integer,Bitmap> {
    private ImageView img;

    public DownloadImageTask(ImageView img) {
        this.img = img;
    }
...
}

Но обычно я рекомендую использовать UniversalImageLoader для отложенной загрузки изображений и отображения . Он может кэшировать ваши изображения в памяти и / или в файловой системе (SD-карта), если вам нужно.

Простой пример использования:

ImageLoader.getInstance().displayImage(imageUrl, imageView);

Это действительно упростит вашу жизнь.

...