我希望在我的AsyncTask中看到ProgressDialog。为此,我使用以下代码:
public class ImageUploadActivity extends ActionBarActivity {
private Contact contact;
private ListView lvUploadImage;
private final String[] urls = {"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQBcE1SdhbR-3HCNtqQ13rw0GiatdcE7hBwpgF9h56dHPXuXTCmDA",
"https://encrypted-tbn3.gstatic.com/images?q=tbn:ANd9GcR7T2KyVRzAF1hAETgUBDDiOQTE8ms-p7FAmioXEpkrJHMeM11Oag",
"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRXfdGN9GEU3HIxpBAdd1RZuCsl1A1PQrAYOtTKDdjOb-eP2CK-",
"http://scontent-a.cdninstagram.com/hphotos-xfa1/t51.2885-15/10809574_604759096337220_1443826749_a.jpg",
"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSRNOGN_QuCoCqlZCVjgB0NEIJaofQ669jeJDiarM_MotX-Cl4z",
"http://scontent-b.cdninstagram.com/hphotos-xap1/t51.2885-15/924099_1375628606067848_267270589_a.jpg",
"https://encrypted-tbn1.gstatic.com/images?q=tbn:ANd9GcTptRLPvaqq5Dsofu5d4xhxKxTz-hQCxN1GeSrOrPQzjxFX72Z6",
"https://encrypted-tbn2.gstatic.com/images?q=tbn:ANd9GcRE3rqde5XY-OcdCuii8NL8PYbCfKFjKreQnVi4fKupuuzPviu1"
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_image_upload);
contact = getIntent().getParcelableExtra("get_contact");
lvUploadImage = (ListView) findViewById(R.id.lv_upload_image);
lvUploadImage.setOnItemClickListener(getListener());
}
private AdapterView.OnItemClickListener getListener() {
return new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
DownloadImageTask downloadImageTask = new DownloadImageTask();
downloadImageTask.execute(urls[position]);
try {
Bitmap photo = downloadImageTask.get();
if (photo == null) {
Toast.makeText(getApplicationContext(), "Failed to connect to the network", Toast.LENGTH_SHORT).show();
return;
}
contact.setPhoto(photo);
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
Intent intent = new Intent(getApplicationContext(), CreateOrEditContactActivity.class);
intent.putExtra(CreateOrEditContactActivity.ACTION_EXTRA_KEY, CreateOrEditContactActivity.ACTION_EDIT);
intent.putExtra("edit_contact", contact);
intent.putExtra("current_action", getIntent().getExtras().getString("current_action"));
intent.putExtra(CreateOrEditContactActivity.ACTION_EXTRA_KEY, CreateOrEditContactActivity.ACTION_RETURN);
startActivity(intent);
}
};
}
private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> {
private ProgressDialog pd;
@Override
protected void onPreExecute() {
super.onPreExecute();
pd = new ProgressDialog(getApplicationContext());
pd.setTitle("Downloading");
pd.setMessage("Loading process, please wait");
pd.show();
}
@Override
protected Bitmap doInBackground(String... urls) {
Bitmap bitmap = null;
try {
URL url = new URL(urls[0]);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
InputStream in = connection.getInputStream();
if (connection.getResponseCode() != HttpURLConnection.HTTP_OK) return null;
bitmap = BitmapFactory.decodeStream(in);
} catch (Exception e) {
e.printStackTrace();
}
return bitmap;
}
@Override
protected void onPostExecute(Bitmap bitmap) {
super.onPostExecute(bitmap);
if (pd.isShowing()) pd.dismiss();
}
}
}
但没有任何工作:(我得到了这个例外:
02-11 19:42:13.187 21798-21798/com.mycontacts.app E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.mycontacts.app, PID: 21798
android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application
at android.view.ViewRootImpl.setView(ViewRootImpl.java:566)
at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:272)
at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:69)
at android.app.Dialog.show(Dialog.java:298)
at com.mycontacts.app.activities.MainActivity$1.onItemClick(MainActivity.java:59)
at android.widget.AdapterView.performItemClick(AdapterView.java:300)
at android.widget.AbsListView.performItemClick(AbsListView.java:1143)
at android.widget.AbsListView$PerformClick.run(AbsListView.java:3044)
at android.widget.AbsListView$3.run(AbsListView.java:3833)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5221)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
请告诉我是什么原因?
P.S。我是否在doInBackground()方法中正确下载图像?
我知道了!谢谢Emmanuel。
答案 0 :(得分:0)
将您正在使用的上下文(您的活动)传递给AsyncTask并使用它来实例化ProgressDialog。您可以在AsyncTask中定义新的构造函数并保存上下文,并在onPreExecute
之后使用它。