我想在我的应用程序打开时显示一个进度对话框“加载”。
我尝试使用AsyncTask和其他一些方法(Uithread,线程)来完成此操作并且所有方法都失败了。
我不知道为什么,但是我的手机屏幕上没有显示progressdialog。我总是看到一个黑屏。
在getApnData抛出异常并显示我的活动UI组件后,进度对话框有效,但为时已晚
以下是我的一些代码部分。
//1-1-1-1-1
//On create or OnStart
LoginProgressTask task1 = new LoginProgressTask();
task1.execute();
//Inner class
class LoginProgressTask extends AsyncTask<String, Integer, Boolean> {
@Override
protected Boolean doInBackground(String... params) {
try {
getApnData(); // Do your real work here
} catch (Exception e) {
e.printStackTrace();
}
return Boolean.TRUE; // Return your real result here
}
@Override
protected void onPreExecute() {
super.onPreExecute();
LoginUI.this.pd = ProgressDialog.show(LoginUI.this, "", "Loading...", true, true);
}
@Override
protected void onPostExecute(Boolean result) {
// LoginUI.this.pd.dismiss();
}
}
//2-2-2-2-2
//OnCreate or OnStart
pd = ProgressDialog.show(this, "", "Loading...", true, false);
thread = new Thread(this);
thread.start();
//run
@Override
public void run() {
try {
firstRunUI();
handler.sendEmptyMessage(0);
} catch (Exception e) {
e.printStackTrace();
}
}
//UIRun
public void firstRunUI() {
runOnUiThread(new Runnable() {
@Override
public void run() {
try {
getApnData();
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
//Handler
private Handler handler = new Handler() {
public void handleMessage(Message msg) {
pd.dismiss();
}
};
答案 0 :(得分:2)
好的,首先, 您可以使用以下方案显示进度:
使用您的LoginProgressTask如下
new LoginProgressTask()。execute();
更改
LoginUI.this.pd = ProgressDialog.show(LoginUI.this,“”,“Loading ...”,true,true)
在使用onCreate或onStart而不是问题中的第二个代码块时使用以下内容
new LoginProgressTask()。execute();
这是一个完整的例子
class SomeActivity extends Activity {
ProgressDialog pd ;
class LoginProgressTask extends AsyncTask<String, Integer, Boolean> {
@Override
public void onPreExecute(){
pd = ProgressDialog.show(LoginUI.this, "", "Loading...", true, true);
}
@Override
protected Boolean doInBackground(String... params) {
try {
getApnData(); // Do your real work here
} catch (Exception e) {
e.printStackTrace();
}
return Boolean.TRUE; // Return your real result here
}
}
@Override
protected void onPostExecute(Boolean result) {
pd.dismiss(); //or use handlers it is better
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
new LoginProgressTask().execute();
}
}
这将为你完成工作!!
Nad确保你在PostExecute方法上关闭ProgressDialog *
注意强> 不要在主UI线程中创建视图,因为这可能会导致内存泄漏
<强>更新强> 从getAbnData()更新UI元素 你应该使用处理程序
Handler handler = new Hanlder(){
@Override
public void handleMessage(int what){
//changing UI Elements code comes here
}
}
从代码中使用handler.sendMessage(NUMER)
然后它将处理消息
答案 1 :(得分:1)
这段代码解决了您的问题,甚至没有使用AsyncTask。希望它可以帮到你。
private void Load() {
// TODO Auto-generated method stub
p = new ProgressDialog(YourActivity.this);
p.setMessage("Loading...");
p.setCancelable(false);
p.show();
new Thread(new Runnable() {
public void run() {
// TODO Auto-generated method stub
mHandler.sendEmptyMessage(0);
}
}).start();
}
}
private Handler mHandler = new Handler() {
public void handleMessage(android.os.Message msg) {
super.handleMessage(msg);
p.dismiss();
switch (msg.what) {
case 0:
//LOAD YOUR ACTIVITY HERE
break;
}
}
};