亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在異步堆棧中加載位圖時出現問題

在異步堆棧中加載位圖時出現問題

動漫人物 2022-09-22 13:55:36
我成功地解析了xml,并從標簽和屬性中獲取了文本和URL。文本我已成功設置到我的列表視圖中,但我無法將我的位圖加載到圖像視圖中。我想我忘記了一些小事,比如某個地方的轉換,或者我寫錯了AsyncTask。這是我的解析和異步任務調用:    private List<SomeItem> items = new ArrayList();listView = findViewById(R.id.listView);        IV = findViewById(R.id.iconsrc);        ArrayList<String> list = new ArrayList<>();        try {            XmlPullParser parser = getResources().getXml(R.xml.myxml);            while (parser.next() != XmlPullParser.END_DOCUMENT) {                tagname = parser.getName();                switch (parser.getEventType()){                    case XmlPullParser.START_TAG:                        if (tagname != null && tagname.equals(iconsrc)){                            iconsrcVALUE = parser.getAttributeValue(0);                            myBitmap = new AsyncForBitmap().execute(iconsrcVALUE).get();                            IV.setImageBitmap(myBitmap);                        }                        break;                    case XmlPullParser.TEXT :                        tagtext = parser.getText();                         break;                    case XmlPullParser.END_TAG:                        if (tagname != null && tagname.equals(displayname)) {                            programmes.add(new SomeItem(tagtext, myBitmap));                        }                        break;                }            }        } catch (Throwable t) {            Toast.makeText(this,                    "Error while loading xml document: " + t.toString(), Toast.LENGTH_LONG)                    .show();        }        SomeAdapter adapter = new SomeAdapter(this, R.layout.list_item, items);        listView.setAdapter(adapter);也許我必須在“執行后”()方法上添加(覆蓋)?但是我需要在那里做什么呢?
查看完整描述

2 回答

?
喵喵時光機

TA貢獻1846條經驗 獲得超7個贊

您可以執行一些操作,例如在構造函數中將圖像視圖傳遞到異步任務中。為此,首先修改您的異步任務,如下所示:


class AsyncForBitmap extends AsyncTask<String, Void, Bitmap> {


    private final ImageView mImageView;


    public AsyncForBitmap(ImageView imageView){

        mImageView = imageView;

    }


    private Exception exception;


    protected Bitmap doInBackground(String... urls) {

        try {

            URL url=new URL(urls[0]);

            Bitmap bitmap = BitmapFactory.decodeStream((InputStream)url.getContent());

            return bitmap;


        } catch (MalformedURLException e) {

            e.printStackTrace();

        } catch (IOException e) {

            e.printStackTrace();

        }

        return null;

    }


    protected void onPostExecute(Bitmap bitmap){

        mImageView.setImageBitmap(bitmap);

    }


}

然后,只需執行以下操作:


 ...

 case XmlPullParser.START_TAG:

     if (tagname != null && tagname.equals(iconsrc)){

        iconsrcVALUE = parser.getAttributeValue(0);

        new AsyncForBitmap(IV).execute(iconsrcVALUE);

     }

     break;


查看完整回答
反對 回復 2022-09-22
?
慕運維8079593

TA貢獻1876條經驗 獲得超5個贊

試試這個代碼


protected void onPostExecute(Bitmap bitmap) {

        runOnUiThread(new Runnable() {

            @Override

            public void run() {

                mImageView.setImageBitmap(bitmap);

            }

        });

}


查看完整回答
反對 回復 2022-09-22
  • 2 回答
  • 0 關注
  • 100 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號