Picasso java.lang.IllegalStateException:方法调用不应该从主线程发生

Bri*_*ian 15 android imageview android-asynctask illegalstateexception picasso

我试图用毕加索从三个Bitmap图像中获取三个图像URL

public void onCreate(Bundle savedInstanceState) { 
  super.onCreate(savedInstanceState);
  setContentView(R.layout.tab2);
  Drawable d1 = new BitmapDrawable(Picasso.with(Tab2.this).load(zestimateImg1).get());
}
Run Code Online (Sandbox Code Playgroud)

我正在FATAL EXCEPTION使用此代码.我怀疑它与这应该在内部完成的事实有关AsyncTask,但我不能让它工作.如果使用这是可以避免的,我想在不使用的情况下这样做AsyncTask.

如何在不崩溃的情况下运行此代码?

如果最好的方法是AsyncTask,那么该解决方案是可以的.

小智 10

您无法在主线程中发出同步请求.如果您不想使用AsyncThread,那么只需将Picasso与Target一起使用即可.

Picasso.with(Tab2.this).load(zestimateImg1).into(new Target(...);
Run Code Online (Sandbox Code Playgroud)

我建议您保存对目标的引用,如下所示:

Target mTarget =new Target (...); 
Run Code Online (Sandbox Code Playgroud)

这是因为Picasso对它们使用弱引用,并且它们可能在进程完成之前被垃圾收集.


Nik*_*hil 9

以上都不适用于我而不是这个

Handler uiHandler = new Handler(Looper.getMainLooper());
    uiHandler.post(new Runnable(){
        @Override
        public void run() {
            Picasso.with(Context)
                    .load(imageUrl)
                    .into(imageView);
        }
    });
Run Code Online (Sandbox Code Playgroud)

希望它对某些人有用