在我的应用程序开始时,我有imageLinks列表
List<String> imageLinks = Arrays.asList("http://example.com/1.png",
"http://example.com/2.png",
"http://example.com/3.png"
...
"http://example.com/n.png");
我想下载图像异步,在我的应用程序的下一次运行中没有互联网连接,我想用Picasso显示图像:
mPicasso.load("http://example.com/1.png").into(imageView)
但是当我尝试使用rxJava在后台(io)线程中下载图像时。我想在后台(io)线程中下载它,因为我需要在下载图像时显示ProgressDialog并在完成时转到另一个活动
for (String imageLink:imageLinks )
mPicasso.load(imageLink).into(new SimpleTarget()
@Override
public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
Log.e(TAG, "onBitmapLoaded: "+imageLink);
subscriber.onNext(true);
subscriber.onCompleted();
})
发生错误:
java.lang.IllegalStateException: Method call should happen from the main thread.
at com.squareup.picasso.Utils.checkMain(Utils.java:136)
at com.squareup.picasso.RequestCreator.into(RequestCreator.java:496)
我的另一个想法是使用Retrofit下载图像,但如何将下载的图像添加到Picasso磁盘缓存中以便在下次显示它?
答案 0 :(得分:1)
我想你可以用这个
private void Brick_MouseDown(object sender, MouseEventArgs e)
{
isDragging = true;
}
private void Brick_MouseMove(object sender, MouseEventArgs e)
{
if (isDragging)
{
Brick1.Left = e.X;
Brick1.Top = e.Y;
}
}
public void Brick_MouseUp(object sender, MouseEventArgs m)
{
isDragging = false;
}
在RxJava异步作业中使用它
答案 1 :(得分:0)
就像你发布的例外消息所说的那样 - 你需要在主线程上提出你的毕加索请求。
不要害怕它不会在您拨打电话的线程上执行实际图像(向下)加载。
这正是为什么加载到Picasso的Target
被描述为加载图像的“异步”方式的原因。你在这个问题中使用了“异步”这个词,但我担心你还不完全明白这意味着什么。
答案 2 :(得分:0)
找到解决方案Picasso.fetch(Callback)
就我而言:
mPicasso.load(imageLink).fetch(new Callback() {
@Override
public void onSuccess() {
Log.e(TAG, "onBitmapLoaded: " + imageLink);
subscriber.onNext(true);
subscriber.onCompleted();
}
@Override
public void onError() {
Log.e(TAG, "onBitmapFailed: " + imageLink);
subscriber.onNext(false);
subscriber.onCompleted();
}
});