0

我想在我的AsyncTask中看到ProgressDialog。要做到这一点,我用这个代码:我不能在我的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) 

请告诉我是什么原因

PS难道我下载在方法doInBackground()?正确的图像

我!谢谢,灵光。

+0

'MainActivity'的第59行是什么? – Emmanuel 2015-02-11 17:04:30

+0

它是'Bitmap photo = downloadImageTask.get();' – Fredisson 2015-02-11 17:18:59

+0

使用'get()'失败了'AsyncTask'的用途;它会阻止调用'线程'。改用'execute()'。 – Emmanuel 2015-02-11 17:21:49

回答

0

将您正在使用的上下文(您的活动)传递给AsyncTask并使用它来实例化ProgressDialog。您可以在AsyncTask中定义一个新的构造函数并保存上下文,然后在onPreExecute之后使用它。