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

7

我一直在开发应用程序,其中我有两个活动。

第一个活动叫做“Second”,用于获取下载URL。

在第一个活动的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个回答

6

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

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


耶!整个屏幕会暂时变空白,然后显示已下载的图像。我将使用AsyncTask来实现这一点。感谢您的时间-:)。 - Dev.Sinto

2
如果您的WebService类是异步下载的,则dismiss方法会在show方法之后立即调用,因此您的进度对话框将同时出现和消失。
如果您的Webservice类同步下载,则可能会引起ANR并且系统可能会杀死您的活动。您必须在另一个线程中使用它,例如使用AsyncTask。

0

开始一个新线程

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

0

我认为 ProgressDialog 显示的时间非常短。你应该在启动请求代码为 CharacterSelector.GetFaceBookImageActivity 之前显示它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接