为了账号安全,请及时绑定邮箱和手机立即绑定

在异步堆栈中加载位图时出现问题

在异步堆栈中加载位图时出现问题

动漫人物 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 关注
  • 53 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信