我嘗試製作一個ProgressDialog,顯示用戶與藍牙設備連接的進度,但進度對話框停留在0%,藍牙設備未連接。當我在onCreate()中調用函數時,它會連接,但當我這樣做時,我不會有ProgressDialog。Android ProgressDialog無法正常工作
我不知道該怎麼做!
請幫助!
這是我的代碼
public void StartConnection(){
loading = new ProgressDialog(this);
loading.setTitle("Loading connection...");
loading.setMessage("Loading...");
loading.setProgressStyle(loading.STYLE_HORIZONTAL);
loading.setProgress(0);
loading.setMax(100);
loading.show();
new Thread(new Runnable() {
@Override
public void run() {
try {
//Get device ID
loading.setProgress(0);
loading.setMessage("Getting device ID...");
try {
getDeviceId();
} catch (Exception ex) {
ErrorMessage("Couldn't get device ID");
ErrorAlert += "Error 101: Couldn't get device ID\n";
}
Thread.sleep(2000);
loading.setProgress(20);
//Open connection
loading.setMessage("Opening connection...");
try{
openConnection();
} catch (IOException ex){
ErrorMessage("Couldn't open connection");
ErrorAlert += "Error 102: Couldn't open connection\n";
}
Thread.sleep(2000);
loading.setProgress(40);
//Testing connection
loading.setMessage("Testing connection...");
if (!mmSocket.isConnected()){
ErrorMessage("Test failed!");
ErrorAlert += "Error 103: Test failed!\n";
}
Thread.sleep(2000);
loading.setProgress(60);
//Calibrate sensors
loading.setMessage("Calibrating sensors...");
try{
sendCommand("c");
}catch (IOException ex){
ErrorMessage("Couldn't calibrate sensors");
ErrorAlert += "Error 104: Couldn't calibrate sensors\n";
}
Thread.sleep(2000);
loading.setProgress(80);
//Finish
loading.setMessage("Finishing...");
Thread.sleep(1000);
loading.setProgress(90);
//Clear
loading.setMessage("Clearing some stuff...");
Thread.sleep(1000);
loading.setProgress(100);
if (loading.getProgress() == loading.getMax()) {
loading.dismiss();
Toast.makeText(getApplicationContext(), "Finished, connection is established", Toast.LENGTH_SHORT).show();
}
} catch (Exception e) {
}
}
}).start();
}
編輯: 我認爲這就是問題所在:
03-05 19:34:28.342 3488-3488/com.jules_citronic.racecarcontrol E/ActivityThread: Performing stop of activity that is not resumed: {com.jules_citronic.racecarcontrol/com.jules_citronic.racecarcontrol.Menu}
java.lang.RuntimeException: Performing stop of activity that is not resumed: {com.jules_citronic.racecarcontrol/com.jules_citronic.racecarcontrol.Menu}
at android.app.ActivityThread.performStopActivityInner(ActivityThread.java:3509)
at android.app.ActivityThread.handleStopActivity(ActivityThread.java:3594)
at android.app.ActivityThread.-wrap20(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1392)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5466)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
編輯: 我試圖運用你的建議,但我給出了這樣的錯誤:
Ed它: 嗯,還是老樣子沒有工作:(
這裏是全功能:
private void StartConnection(){
loading = new ProgressDialog(this);
loading.setTitle("Loading connection...");
loading.setMessage("Loading...");
loading.setProgressStyle(loading.STYLE_HORIZONTAL);
loading.setProgress(0);
loading.setMax(100);
loading.show();
new Thread(runOnUiThread(new Runnable() {
@Override
public void run() {
try {
//Get device ID
loading.setProgress(0);
loading.setMessage("Getting device ID...");
try {
getDeviceId();
} catch (Exception ex) {
ErrorMessage("Couldn't get device ID");
ErrorAlert += "Error 101: Couldn't get device ID\n";
}
Thread.sleep(2000);
loading.setProgress(20);
//Open connection
loading.setMessage("Opening connection...");
try {
openConnection();
} catch (IOException ex) {
ErrorMessage("Couldn't open connection");
ErrorAlert += "Error 102: Couldn't open connection\n";
}
Thread.sleep(2000);
loading.setProgress(40);
//Testing connection
loading.setMessage("Testing connection...");
if (!mmSocket.isConnected()) {
ErrorMessage("Test failed!");
ErrorAlert += "Error 103: Test failed!\n";
}
Thread.sleep(2000);
loading.setProgress(60);
//Calibrate sensors
loading.setMessage("Calibrating sensors...");
try {
sendCommand("c");
} catch (IOException ex) {
ErrorMessage("Couldn't calibrate sensors");
ErrorAlert += "Error 104: Couldn't calibrate sensors\n";
}
Thread.sleep(2000);
loading.setProgress(80);
//Finish
loading.setMessage("Finishing...");
Thread.sleep(1000);
loading.setProgress(90);
//Clear
loading.setMessage("Clearing some stuff...");
Thread.sleep(1000);
loading.setProgress(100);
if (loading.getProgress() == loading.getMax()) {
loading.dismiss();
Toast.makeText(getApplicationContext(), "Finished, connection is established", Toast.LENGTH_SHORT).show();
}
} catch (Exception e) {
}
}
})).start();
}
編輯: 修正了runOnUiThread:
但現在ProgressDialog根本沒有出現:(當我點擊啓動活動的按鈕時,屏幕會變黑並凍結,wh藍牙連接時,它會加載佈局。從未顯示過ProgressDialog。
使用runOnUiThread方法:[http://stackoverflow.com/a/11140429/5207572](http: //stackoverflow.com/a/11140429/5207572) –