0

私はアンドロイドが初めてなので、これについて助けを求めています

私がやろうとしていること:

xml ファイルをダウンロードしてオブジェクトに読み込み、レイアウト インフレータを使用して表示しています。

xml内に画像へのリンクがあります。次に、別のasynctaskを起動して、指定されたリンクから画像を遅延ロードしようとしています。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();
                }

            }
4

2 に答える 2

0

DownloadImageTaskでimg変数が初期化される場所がわかりません。コンストラクターに渡すのを忘れた可能性があります:

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);

それは本当にあなたの人生を簡素化します。

于 2011-12-19T13:35:19.673 に答える
0

指定された URL から画像をダウンロードするための別のタスクを実装する代わりに、以下を実装することをお勧めします: Android - ListView で画像の遅延読み込みを行う方法

于 2011-12-19T13:41:50.450 に答える