进度对话框未在onActivityResult函数上显示

时间:2011-04-04 09:05:22

标签: android android-activity progressdialog

我一直在开发应用程序,因为我有两项活动 第一个活动被叫第二个以获得下载URL。

在第一个Activity的OnActivityResult函数中,有一个ProgressDialog 它显示使用该URL的图像下载状态。

问题是该活动中未显示进度对话框。

protected void onActivityResult(int requestCode, int resultCode, Intent imagePicked) 
    {       
        super.onActivityResult(requestCode, resultCode, imagePicked);
            if(resultCode==RESULT_OK)
            {

                ProgressDialog progressDialog=ProgressDialog.show(this, "", "Loading Image");
                switch(requestCode) 
                {
                    case CharacterSelector.GetFaceBookImage:
                        //Toast.makeText(this, "onFacebookimageresult", Toast.LENGTH_SHORT).show();
                        String ImageUrl=imagePicked.getStringExtra("DownloadLink");
                        WebService getImage=new WebService(ImageUrl);

                        Log.d("Selected Img url", ""+ImageUrl);  
                        InputStream inputStream;
                        try 
                        {
                            inputStream = getImage.getHttpStream(ImageUrl);
                            getImage=null;
                            Bitmap bitmap=BitmapFactory.decodeStream(inputStream);
                            inputStream=null;
                             mybitmapDrawable=new BitmapDrawable(bitmap);
                            addImageUserImage(mybitmapDrawable.mutate());
                            progressDialog.dismiss();
                            bitmap=null;
                        }
                        catch (IOException e)
                        {
                            //Show server Error message:
                            e.printStackTrace();
                        }

                        break;

此致 Kariyachan

4 个答案:

答案 0 :(得分:5)

您不应该在主线程上执行长时间运行的任务(即通过网络获取图像),因为这会阻止UI重绘。

使用AsyncTask在后台执行长时间运行的任务,同时更新用户界面。

答案 1 :(得分:2)

如果您的WebService类异步下载,则会在show之后立即调用dismiss,因此您的进度对话框会同时显示并消失。

如果您的Webservice类同步下载,则可能导致ANR,并且您的活动可能会被系统杀死。您必须使用AsyncTask例如

在另一个线程中使用它

答案 2 :(得分:0)

开始一个新线程

verlauf = ProgressDialog.show(ctx, "Infrarotauslesung", "initialisiere Bluetooth",true,false);
    new Thread(){
         @Override
        public void run(){ 
                         Looper.prepare();
        }.start();

答案 3 :(得分:0)

我认为ProgressDialog已经被展示了很短的时间。您应该在使用请求代码Activity开始CharacterSelector.GetFaceBookImage之前显示它。