Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/22.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 无法关闭Android中的进度对话框_Java_Android_Mobile_Dialog_Progress - Fatal编程技术网

Java 无法关闭Android中的进度对话框

Java 无法关闭Android中的进度对话框,java,android,mobile,dialog,progress,Java,Android,Mobile,Dialog,Progress,我想在android中创建一个进度对话框,保持它打开2秒钟,然后关闭它 以下是我编写的代码: package com.example.proressdialogtest; import android.app.activity; import android.app.ProgressDialog; import android.os.bundle; public class MainActivity extends Activity { @Override public vo

我想在android中创建一个进度对话框,保持它打开2秒钟,然后关闭它

以下是我编写的代码:

package com.example.proressdialogtest;

import android.app.activity;
import android.app.ProgressDialog;
import android.os.bundle;

public class MainActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState); 
        ProgressDialog pg = new ProgressDialog(MainActivity.this, 4);

        pg.show(MainActivity.this, null, "Searching...", false);

        try {
            Thread.sleep(2000);
        } catch (Exception e) {
            e.printStackTrace();
        }  

        pg.dismiss();
}
当我在我的设备上运行代码时,ProgressDialog会打开,然后保持打开状态,2秒钟后不会关闭。我做错了什么


根据下面的答案。我在doInBackground方法之前和之后分别添加了onPreExecute()和onPostExecute()方法

下面是这两种方法的代码

ProgressDialog pd;

public void onPreExceute() {
    pd = new ProgressDialog(MainActivity.this);
    pd.show(MainActivity.this, "", "Searching...", false);
}

public void onPostExecute() {
    pd.dismiss();
}

这个问题仍然存在。进度条将不会关闭。

您正在
UI线程上调用
sleep()
。不要这样做。使用
runOnUiThread
AsyncTask

我将使用
异步任务
。您将在
onPreExecute()
中启动
ProgressDialog
,然后在
onPostExecute()
中关闭它。它是一个
UI
元素,因此在
doInBackground()
中使用它会导致错误


您正在
UI线程上调用
sleep()
。不要这样做。使用
runOnUiThread
AsyncTask

我将使用
异步任务
。您将在
onPreExecute()
中启动
ProgressDialog
,然后在
onPostExecute()
中关闭它。它是一个
UI
元素,因此在
doInBackground()
中使用它会导致错误

编辑:

使用此代码

public class MainActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        final ProgressDialog pg ;

      pg =  ProgressDialog.show(MainActivity.this, null, "Searching...", false);

        Thread timer=new Thread(){
            public void run()
            {
                try {
                    sleep(2000);
                } catch (Exception e) {
                    e.printStackTrace();
                }
                finally{
                     pg.dismiss();
                }
            }

        };
        timer.start();
}
}

您正在通过调用暂停UI线程

 Thread.sleep(2000);
因为Thread.sleep(x)将使当前线程睡眠x毫秒

这是件坏事

放置

我不知道为什么

最后一个块中的pg.dismise(),以确保进度对话框将关闭

而且你的代码也不会运行,因为你错过了

编辑:

使用此代码

public class MainActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        final ProgressDialog pg ;

      pg =  ProgressDialog.show(MainActivity.this, null, "Searching...", false);

        Thread timer=new Thread(){
            public void run()
            {
                try {
                    sleep(2000);
                } catch (Exception e) {
                    e.printStackTrace();
                }
                finally{
                     pg.dismiss();
                }
            }

        };
        timer.start();
}
}

您正在通过调用暂停UI线程

 Thread.sleep(2000);
因为Thread.sleep(x)将使当前线程睡眠x毫秒

这是件坏事

放置

我不知道为什么

最后一个块中的pg.dismise(),以确保进度对话框将关闭

而且你的代码也不会运行,因为你错过了


以下代码适用于您

 new AsyncTask<Integer, Integer, Boolean>()
             {
                 ProgressDialog progressDialog = null;

                 @Override
                 protected void onPreExecute()
                 {                         
                     progressDialog = ProgressDialog.show(MainActivity.this, "",
                             "Loading...");
                 }

                 @Override
                 protected Boolean doInBackground(Integer... params)
                 {
                     if (params == null)
                     {
                         return false;
                     }
                     try
                     {

                         Thread.sleep(2000);

                     }
                     catch (Exception e)
                     {

                         return false;
                     }

                     return true;
                 }

                 @Override
                 protected void onPostExecute(Boolean result)
                 {
                     progressDialog.dismiss();                        

                 }
             }.execute();
newasynctask()
{
ProgressDialog=null;
@凌驾
受保护的void onPreExecute()
{                         
progressDialog=progressDialog.show(MainActivity.this,“,
“装载…”);
}
@凌驾
受保护的布尔doInBackground(整数…参数)
{
if(params==null)
{
返回false;
}
尝试
{
《睡眠》(2000年);
}
捕获(例外e)
{
返回false;
}
返回true;
}
@凌驾
受保护的void onPostExecute(布尔结果)
{
progressDialog.disclose();
}
}.execute();

以下代码适用于您

 new AsyncTask<Integer, Integer, Boolean>()
             {
                 ProgressDialog progressDialog = null;

                 @Override
                 protected void onPreExecute()
                 {                         
                     progressDialog = ProgressDialog.show(MainActivity.this, "",
                             "Loading...");
                 }

                 @Override
                 protected Boolean doInBackground(Integer... params)
                 {
                     if (params == null)
                     {
                         return false;
                     }
                     try
                     {

                         Thread.sleep(2000);

                     }
                     catch (Exception e)
                     {

                         return false;
                     }

                     return true;
                 }

                 @Override
                 protected void onPostExecute(Boolean result)
                 {
                     progressDialog.dismiss();                        

                 }
             }.execute();
newasynctask()
{
ProgressDialog=null;
@凌驾
受保护的void onPreExecute()
{                         
progressDialog=progressDialog.show(MainActivity.this,“,
“装载…”);
}
@凌驾
受保护的布尔doInBackground(整数…参数)
{
if(params==null)
{
返回false;
}
尝试
{
《睡眠》(2000年);
}
捕获(例外e)
{
返回false;
}
返回true;
}
@凌驾
受保护的void onPostExecute(布尔结果)
{
progressDialog.disclose();
}
}.execute();

我正在使用的程序中有一个异步任务,它有一个受保护的布尔doInBackground(Integer…params)方法。我曾尝试在doInBackground函数中执行上述操作,但出现了相同的错误。在发布问题之前,我尝试将该帖子中的内容集成到我的代码中。但它不起作用。所以我自己发布了这个问题。@aagarwal
onPostExecute()
doInBackground()
完成后被调用,所以你需要在那里做一些工作,比如你的
线程。sleep()
call@codeMagic由于他没有找到解决方案,我已取消删除我的答案并发布了答案。@Pragnani没问题。每个人都可以看到不同的选项。我正在使用的程序中有一个异步任务,它有一个受保护的布尔doInBackground(Integer…params)方法。我曾尝试在doInBackground函数中执行上述操作,但出现了相同的错误。在发布问题之前,我尝试将该帖子中的内容集成到我的代码中。但它不起作用。所以我自己发布了这个问题。@aagarwal
onPostExecute()
doInBackground()
完成后被调用,所以你需要在那里做一些工作,比如你的
线程。sleep()
call@codeMagic由于他没有找到解决方案,我已取消删除我的答案并发布了答案。@Pragnani没问题。这对everyo有好处