Java 无法关闭Android中的进度对话框
我想在android中创建一个进度对话框,保持它打开2秒钟,然后关闭它 以下是我编写的代码: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
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函数中执行上述操作,但出现了相同的错误。在发布问题之前,我尝试将该帖子中的内容集成到我的代码中。但它不起作用。所以我自己发布了这个问题。@aagarwalonPostExecute()
在doInBackground()
完成后被调用,所以你需要在那里做一些工作,比如你的线程。sleep()
call@codeMagic由于他没有找到解决方案,我已取消删除我的答案并发布了答案。@Pragnani没问题。每个人都可以看到不同的选项。我正在使用的程序中有一个异步任务,它有一个受保护的布尔doInBackground(Integer…params)方法。我曾尝试在doInBackground函数中执行上述操作,但出现了相同的错误。在发布问题之前,我尝试将该帖子中的内容集成到我的代码中。但它不起作用。所以我自己发布了这个问题。@aagarwalonPostExecute()
在doInBackground()
完成后被调用,所以你需要在那里做一些工作,比如你的线程。sleep()
call@codeMagic由于他没有找到解决方案,我已取消删除我的答案并发布了答案。@Pragnani没问题。这对everyo有好处