【问题标题】:ProgressDailog in asynctask from another Activity来自另一个 Activity 的异步任务中的进度对话框
【发布时间】:2017-09-13 05:54:59
【问题描述】:

我有两个Activity。 MainActivity 正在调用另一个扩展 AsyncTaskActivity。在AsyncTask 我有显示ProgressDailogonPreExecute(),但ProgressDailog 没有被显示。原因可能是AyncTask 执行时间较短,但响应但响应需要时间,因此应该显示ProgressDialog

提供以下代码。

Aysnc 类

 public class NewConnections extends AsyncTask<Void,Void,String>{

        Context context;
        String[] name,value;
        String Geturl,para;
        ProgressDialog progressDialog;

        NewConnections(Context context,String[] name,String[] value,String Url){
            this.context = context;
            this.name = name;
            this.value = value;
            Geturl = Url;
        }
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            progressDialog = new ProgressDialog(context);
            progressDialog.setMessage("Please Wait");
            progressDialog.show();
        }
        @Override
        protected String doInBackground(Void... voids) {
            try
            {
                para = DCBUtil.jsonCovertion(name,value);
                URL url = new URL(Geturl);

                String responseStr = XXX.callJsonHttp(url,para);
                System.out.println("Response of Home Open FD :: "+responseStr);

                return responseStr;

            }catch(Exception e)
            {
                return "Error";
            }
        }
        @Override
        protected void onPostExecute(String s) {
            super.onPostExecute(s);
            progressDialog.dismiss();

        }
    }

主类

public class FirstPage extends AppCompatActivity {

    Button existUser,newUser;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_first_page);

        existUser = (Button)findViewById(R.id.existUser);
        newUser = (Button)findViewById(R.id.newUser);

        newUser.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                String[] value = {"asdasd"};
                String[] name = {"dprm"};

                try {
                    NewConnections v= new NewConnections(FirstPage.this,name,value,"url is provided");
                    v.execute().get();

                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });

【问题讨论】:

  • 这不是一个 Android Studio 问题。不要使用那个标签
  • 您是否通过评论这一行来检查进度是否显示 progressDialog.dismiss();
  • 是的,通过执行该进度对话框已显示,但问题是当该特定活动完成时它的工作。 ProgressDialog 仍在工作。这是错误的。
  • 尝试 onPreExecute() : progressDialog.setCancelable(false);
  • @NikhilSawant 您是否在 postExecute() 中显示结果?如果是,则首先处理响应,然后关闭进度

标签: android-fragments android-asynctask progressdialog


【解决方案1】:

试试这个:

public class NewConnections extends AsyncTask<Void,Void,String>{

        Context context;
        String[] name,value;
        String Geturl,para;
        public static ProgressDialog progressDialog;

        NewConnections(Context context,String[] name,String[] value,String Url){
            this.context = context;
            this.name = name;
            this.value = value;
            Geturl = Url;
        }
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            progressDialog = new ProgressDialog(context);
            progressDialog.setCancelable(false);
            progressDialog.setMessage("Please Wait");
            progressDialog.show();
        }
        @Override
        protected String doInBackground(Void... voids) {
            try
            {
                para = DCBUtil.jsonCovertion(name,value);
                URL url = new URL(Geturl);

                String responseStr = XXX.callJsonHttp(url,para);
                System.out.println("Response of Home Open FD :: "+responseStr);

                return responseStr;

            }catch(Exception e)
            {
                return "Error";
            }
        }
        @Override
        protected void onPostExecute(String s) {
            super.onPostExecute(s);
if(progressDialog!=null)
            progressDialog.dismiss();

        }
    }

当您退出活动时,然后在该活动的 onDestry() 方法中编写以下代码

 @Override
        protected void onDestroy() {
    if(NewConnections.progressDialog!=null)
                    NewConnections.progressDialog.dismiss();

            super.onDestroy();
        }

【讨论】:

    【解决方案2】:

    试试这个:: 希望对你有帮助。

    Dialog dialog;
    
        @Override
    
        protected void onPreExecute() {
            super.onPreExecute();
                showProgressBar();
    
        } 
    
    @Override
        protected void onPostExecute(String result) {
            super.onPostExecute(result);
            try{
                    hideProgressBar();
            }catch (Exception e){
                e.printStackTrace();
            }
    
        }
    
    public void showProgressBar() {
            dialog = new Dialog(mContext, android.R.style.Theme_Translucent);
            dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
                dialog.getWindow().setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS,
                        WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
            }
            dialog.setCancelable(false);
    
            LayoutInflater inflater = (LayoutInflater) mContext
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            View viewChild = inflater.inflate(R.layout.loader, null);
    
            dialog.setContentView(viewChild);
    
            Runtime.getRuntime().gc();
            System.gc();
    
            try {
    
                dialog.show();
            } catch (Exception e) {
                // TODO: handle exception
                e.printStackTrace();
            }
        }
    
    /**
         * Hide progress dialog
         */
        public void hideProgressBar() {
            if (dialog != null && dialog.isShowing()) {
                dialog.dismiss();
            }
        }
    
    loader.xml::
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent" android:layout_height="match_parent"
        android:gravity="center">
    
           <ProgressBar
            android:id="@+id/loading_spinner"
            android:layout_width="48dp"
            android:layout_height="48dp"
            android:indeterminateTintMode="src_atop"
            android:indeterminateTint="@color/colorAccent"
            android:layout_gravity="center" />
    
    
    </RelativeLayout>
    

    【讨论】:

      猜你喜欢
      • 2023-03-31
      • 2017-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-17
      相关资源
      最近更新 更多