I try to make a ProgressDialog that shows the user the progress of connecting with a Bluetooth device but my progress dialog stays at 0% and the Bluetooth device doesn't connect. When I call the functions in onCreate() it connects but I won't have a ProgressDialog when I do that.
I don't know what to do!
PLEASE HELP!
This is my code
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();
}
Edit: I think this is the problem:
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)
Edit: I tried to apply the you suggestion but i gives this error:
Edit: Eh, stil doesn't work :(
Here is the whole function:
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();
}
Edit: Fixed the runOnUiThread:
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();
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) {
}
}
});
}
But now the ProgressDialog doesn't appear at all.:( When I click on the button that starts the activity, the screen goes black and freezes, when the Bluetooth connects, it loads the layout. Never showed a ProgressDialog.