在 AsyncTask 中使用 picasso 加载图像
Loading Image using picasso inside AsyncTask
我正在使用 picasso 加载图像作为我 activity 的背景,我想使用 AsyncTask,当图像正在加载时,进度条会消失,以便更好地呈现我的图像申请,
这是我的代码:
private class RemoteDataTask extends AsyncTask<Void, Void, Void> {
@Override
protected void onPreExecute() {
super.onPreExecute();
mProgressDialog = new ProgressDialog(MainActivity.this);
mProgressDialog.setMessage("Chargement...");
mProgressDialog.setIndeterminate(false);
mProgressDialog.show();
}
@Override
protected Void doInBackground(Void... params) {
Picasso.with(MainActivity.this).load("http://tv2.orangeadd.com/mediacenter-data/ofc__bg_home.jpg").into(background,new com.squareup.picasso.Callback() {
@Override
public void onSuccess() {
mProgressDialog.dismiss();
}
@Override
public void onError() {
}
});
return null;
}
@Override
protected void onPostExecute(Void result) {
}
}
这总是显示错误并迫使我的应用程序退出!
谢谢大家:)
我猜这个错误是因为您试图在后台线程中修改 UI 元素(对话框),这是不可能的。
您不需要为此使用 AsyncTask
,因为 Picasso
已经在后台进行了解码。
您收到错误消息是因为 picasso 的加载函数已经是异步的。所以你可以在 UI 线程中这样做:
public void functionCalledFromUIThread(){
mProgressDialog = new ProgressDialog(MainActivity.this);
mProgressDialog.setMessage("Chargement...");
mProgressDialog.setIndeterminate(false);
mProgressDialog.show();
Picasso.with(MainActivity.this).load("http://tv2.orangeadd.com/mediacenter-data/ofc__bg_home.jpg").into(background,new com.squareup.picasso.Callback() {
@Override
public void onSuccess() {
mProgressDialog.dismiss();
}
@Override
public void onError() {
mProgressDialog.dismiss();
}
});
}
public void loadImageInBackground() {
mProgressDialog = new ProgressDialog(MainActivity.this);
mProgressDialog.setMessage("Chargement...");
mProgressDialog.setIndeterminate(false);
Target target = new Target() {
@Override
public void onPrepareLoad(Drawable arg0) {
mProgressDialog.show();
}
@Override
public void onBitmapLoaded(Bitmap arg0, LoadedFrom arg1) {
background.setImageBitmap(arg0);
mProgressDialog.dismiss();
}
@Override
public void onBitmapFailed(Drawable arg0) {
// TODO Auto-generated method stub
mProgressDialog.dismiss();
}
};
Picasso.with(MainActivity.this)
.load("http://tv2.orangeadd.com/mediacenter-data/ofc__bg_home.jpg")
.into(target);
}
我正在使用 picasso 加载图像作为我 activity 的背景,我想使用 AsyncTask,当图像正在加载时,进度条会消失,以便更好地呈现我的图像申请,
这是我的代码:
private class RemoteDataTask extends AsyncTask<Void, Void, Void> {
@Override
protected void onPreExecute() {
super.onPreExecute();
mProgressDialog = new ProgressDialog(MainActivity.this);
mProgressDialog.setMessage("Chargement...");
mProgressDialog.setIndeterminate(false);
mProgressDialog.show();
}
@Override
protected Void doInBackground(Void... params) {
Picasso.with(MainActivity.this).load("http://tv2.orangeadd.com/mediacenter-data/ofc__bg_home.jpg").into(background,new com.squareup.picasso.Callback() {
@Override
public void onSuccess() {
mProgressDialog.dismiss();
}
@Override
public void onError() {
}
});
return null;
}
@Override
protected void onPostExecute(Void result) {
}
}
这总是显示错误并迫使我的应用程序退出!
谢谢大家:)
我猜这个错误是因为您试图在后台线程中修改 UI 元素(对话框),这是不可能的。
您不需要为此使用 AsyncTask
,因为 Picasso
已经在后台进行了解码。
您收到错误消息是因为 picasso 的加载函数已经是异步的。所以你可以在 UI 线程中这样做:
public void functionCalledFromUIThread(){
mProgressDialog = new ProgressDialog(MainActivity.this);
mProgressDialog.setMessage("Chargement...");
mProgressDialog.setIndeterminate(false);
mProgressDialog.show();
Picasso.with(MainActivity.this).load("http://tv2.orangeadd.com/mediacenter-data/ofc__bg_home.jpg").into(background,new com.squareup.picasso.Callback() {
@Override
public void onSuccess() {
mProgressDialog.dismiss();
}
@Override
public void onError() {
mProgressDialog.dismiss();
}
});
}
public void loadImageInBackground() {
mProgressDialog = new ProgressDialog(MainActivity.this);
mProgressDialog.setMessage("Chargement...");
mProgressDialog.setIndeterminate(false);
Target target = new Target() {
@Override
public void onPrepareLoad(Drawable arg0) {
mProgressDialog.show();
}
@Override
public void onBitmapLoaded(Bitmap arg0, LoadedFrom arg1) {
background.setImageBitmap(arg0);
mProgressDialog.dismiss();
}
@Override
public void onBitmapFailed(Drawable arg0) {
// TODO Auto-generated method stub
mProgressDialog.dismiss();
}
};
Picasso.with(MainActivity.this)
.load("http://tv2.orangeadd.com/mediacenter-data/ofc__bg_home.jpg")
.into(target);
}