【问题标题】:Get Bitmap with Picasso ILLEGAL_STATE_EXCEPTION使用 Picasso ILLEGAL_STATE_EXCEPTION 获取位图
【发布时间】:2015-08-15 10:35:32
【问题描述】:

我尝试从扩展 AsyncTask 的类中发送到 Picasso 的 url 获取位图。 它看起来像这样:

public class MoviesTask extends AsyncTask<String, Void, String[]> {

// Target object for Bitmap convert
private Target loadTarget;
private Bitmap mBitmap;
private byte[] img;

public void getBitmap(String url){
    if (loadTarget == null)
        loadTarget = new Target() {
            @Override
            public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
                mBitmap = bitmap;
            }

            @Override
            public void onBitmapFailed(Drawable errorDrawable) {

            }

            @Override
            public void onPrepareLoad(Drawable placeHolderDrawable) {

            }


        };
    Picasso.Builder builder = new Picasso.Builder(mContext);
    builder.listener(new Picasso.Listener() {
        @Override
        public void onImageLoadFailed(Picasso picasso, Uri uri, Exception exception) {
            exception.printStackTrace();
        }
    });

    builder.build().with(mContext).load(url).into(loadTarget);
}

我得到的例外是: 原因:java.lang.IllegalStateException:方法调用应该从主线程发生。

无法真正理解我的代码有什么问题,希望任何人都可以帮助我解决这个问题。

【问题讨论】:

    标签: android bitmap android-asynctask picasso


    【解决方案1】:

    好的,我尝试将 .get() 与 Picasso 一起使用,然后将其插入 Bitmap 即可。

    也许会帮助别人

        public Bitmap getBitmap(String url) throws IOException {
        Bitmap mBitmap;
        Picasso.Builder builder = new Picasso.Builder(mContext);
        builder.listener(new Picasso.Listener() {
            @Override
            public void onImageLoadFailed(Picasso picasso, Uri uri, Exception exception) {
                exception.printStackTrace();
            }
        });
    
       return mBitmap = builder.build().with(mContext).load(url).get();
    }
    

    【讨论】:

    • 异常信息说明了一切,你需要调用毕加索的异步方法,以避免在UI线程上进行网络调用。
    • 其实恰恰相反,异常说应该从 UI 线程调用into。这是一个奇怪的决定。
    猜你喜欢
    • 2016-10-02
    • 2013-12-09
    • 2017-02-02
    • 2017-01-21
    • 1970-01-01
    • 2014-12-04
    • 2019-04-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多