Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/194.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从一个活动切换到另一个活动时创建进度对话框_Java_Android_Android Asynctask_Progressdialog - Fatal编程技术网

Java 从一个活动切换到另一个活动时创建进度对话框

Java 从一个活动切换到另一个活动时创建进度对话框,java,android,android-asynctask,progressdialog,Java,Android,Android Asynctask,Progressdialog,我有一个自定义对话框片段。我想在切换活动时显示此对话框 情景:- 1实际上,我启动了对话框。 2启动一个异步任务类。 3在doInBackground中进行一些身份验证。 4从onPostExecute启动新活动 问题:- 对话框在异步任务之前停止 这是我的密码:- myWebView.setWebViewClient(new WebViewClient() { @Override public void onPageStarted(W

我有一个自定义对话框片段。我想在切换活动时显示此对话框

情景:- 1实际上,我启动了对话框。 2启动一个异步任务类。 3在doInBackground中进行一些身份验证。 4从onPostExecute启动新活动

问题:-

对话框在异步任务之前停止

这是我的密码:-

myWebView.setWebViewClient(new WebViewClient()
        {


        @Override
            public void onPageStarted(WebView view, String url,
                    Bitmap favicon) 
            {
                // TODO Auto-generated method stub
                super.onPageStarted(view, url, favicon);
                redirected =view.getUrl();
                redirected=  Uri.decode(redirected);

                if(redirected!=null && redirected.contains(string1))
                {

                    myprogressDialog.show(getFragmentManager(), "Wait");
                }



            }

            @Override
            public void onPageFinished(WebView view, String url) 
            {
                // TODO Auto-generated method stub
                super.onPageFinished(view, url);


                if(redirected!=null && redirected.contains(mystring) )
                {


                    myWebView.stopLoading();

                    String authorizationContentString =  myurl


                    new Authentication(Activity2.this, myprogressDialog, url).execute(authorizationString);


                }

private static class ProgressDialogFragment extends DialogFragment
        {
             public static ProgressDialogFragment newInstance()
                {
                    return new ProgressDialogFragment();
                }

                @Override
                public void onCreate(Bundle savedInstanceState)
                {
                    super.onCreate(savedInstanceState);
                    setStyle(STYLE_NO_FRAME, android.R.style.Theme_Translucent);
                }

                @Override
                public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
                {
                    return inflater.inflate(R.layout.fragment_dialog_progress, container, false);
                }
        }
Authentication.java

    @Override
protected void onPreExecute()
{
    // TODO Auto-generated method stub

    super.onPreExecute();

    /*  progDia.show(man, "wait");
      progDia= new Utility.ProgressDialogFragment().newInstance();*/

}

public AuthenticateDevice(Details1 myContext, ProgressDialogFragment myprogressDialog, String Url)
{
    // TODO Auto-generated constructor stub
    mContext = myContext;
    this.progDia = myprogressDialog;
    this.Url = Url;
    this.mActivity = myContext;
}

@Override
protected Void doInBackground(String... params) 
{
    // TODO Auto-generated method stub
    //Some authentication
            return null;
}

@Override
protected void onPostExecute(Void result) 
{
    // TODO Auto-generated method stub
    super.onPostExecute(result);

    if(progDia!=null&&progDia.isVisible())
    {
        progDia.dismiss();
    }
    Intent myIntent = new Intent(mContext, Activity2.class);





    myIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    mContext.startActivity(myIntent);
    mActivity.finish();
}

尝试以下代码以异步方式显示进度对话框

ProgressDialog pd;

class MYAsync extends AsyncTask<Void , Void, String>{

        @Override
        protected void onPreExecute() {             
            //   pd.setTitle("Please Wait");
            pd.setMessage("Working...");
            pd.setCancelable(false);
            pd.setIndeterminate(true);
            pd.show();
        }
        @Override
        protected String doInBackground(Void... params) {
            // TODO Auto-generated method stub

            return null;
        }

        @Override
        protected void onPostExecute(String sResponse) {
            pd.dismiss();
            pd.cancel();


            }
        }
    }

我试着重新创建它,它似乎工作得很好。下面的方法有一些注释,解释您的操作

private void myWOrk() {

    try {

         final ProgressDialog Dialog = new ProgressDialog(this);
         Dialog.setMessage("Loading route...");
         Dialog.show();

        Thread.sleep(2000);// load url and redirect
        //Toast.makeText(LoginActivity.this, "redirect caught", Toast.LENGTH_SHORT).show();

        new AsyncTask<Object, Object, Object>() {

            protected String doInBackground(Object... params) {
                try {
                    Thread.sleep(2000);// authenticate
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                return null;
            }

            protected void onPostExecute(Object result) {

                Toast.makeText(LoginActivity.this, "onPostExecute", Toast.LENGTH_SHORT).show();
                try {
                    Thread.sleep(2000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                Dialog.dismiss();// start your new activity here

            };

        }.execute(null, null, null);
    } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

}`

为什么不在onPreExecute中创建进度对话框,并在onPostExecute中取消它呢?上面的评论很有意义!或者在onPageStarted之前尝试调用progressBar.show,这应该能很好地工作。@stack\ved我想在url重定向到某个url时实际显示progressBar对话框。这个很好用。但是当新的活动开始时,你应该希望在url laods+重定向+身份验证时显示进度条。所有这些都应该发生在进度条的前面?甚至在调用此行new AuthenticationActivity2.this、myprogressDialog、url.executeauthorizationString之前,对话框是否已被取消@是的,这正是我想做的。我想在异步任务之前启动progressdialog。例如,在我调用asynctask并在新活动开始后结束它之前,您是否希望在新活动开始后执行其他操作Dialog您可以在第二个活动开始后执行,这是可能的,但这将是肮脏的,因为您必须将当前活动的引用传递给ProgressDialogFragment,以便它在所有时间点都有一个有效的父级。@stack\ved Iam正在Web视图中加载登录页。当用户登录时,他被重定向到一个页面,在那里他被验证。此页面显示您已通过身份验证的消息。然后,下一个活动开始。我在登录后捕获第一个重定向的url,在下一个活动开始之前显示一个对话框,这样用户就不会看到You is authenticated页面,而是在下一个活动之前一直看到该对话框