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.
 
     
     
    