Daniel van wolf
Daniel van wolf

Reputation: 403

Why my timer is not starting at all and how it should stop?

I have a thread with a runnable:

Thread serverChecksThread = new Thread(new Runnable() {   
        @Override
        public void run() {
            Looper.prepare();
            Looper l = Looper.myLooper();
            customHandler = new Handler(l);
            customHandler.postDelayed(serverChecksRunnable, 0);
            Looper.loop();
        }
});

Runnable serverChecksRunnable = new Runnable() {
    @Override
    public void run() {
        if (connectedSuccess == true) {
                checkServer = Get(iptouse + "uploadstatus");
        }

        Handler h=new Handler(Looper.getMainLooper());
        h.post(new Runnable() {
            @Override
            public void run() {
                if (connectedSuccess) {
                    if (checkServer != null) {
                        String a = null;
                        try {
                            a = new String(checkServer, "UTF-8");
                            textforthespeacch = a;
                            if (textforthespeacch.contains("upload completed")) {
                                String varr = textforthespeacch.substring(17);
                                String varr1 = textforthespeacch.substring(0, 16);
                                textforthespeacch = varr1;
                                status1.setText("Upload completed" + " " + varr + "%");
                                numberofuploadedfilescounter += 1;
                                uploadedfilescount.setText(("Uploaded Files: " + numberofuploadedfilescounter));
                                MainActivity.this.initTTS();
                            }
                            if (textforthespeacch.contains("uploading") {
                                String[] split = textforthespeacch.split(" ");
                                textforthespeacch = split[0];
                                status1.setText("Uploading" + " " + split[1] + "%");
                                updateTimerThread.start();
                                servercheckCounter += 1;
                                if (servercheckCounter == 1) {
                                    MainActivity.this.initTTS();
                                }
                            }
                        }
                        catch (UnsupportedEncodingException e) {
                            e.printStackTrace();
                        }
                    }
                }
            }
        });
        customHandler.postDelayed(serverChecksRunnable,1000);
    }
});

The timer thread:

Thread updateTimerThread = new Thread(new Runnable() {
    @Override
    public void run() {
        try {
            long updatedTime = 0L;
            long timeInMilliseconds = 0L;
            timeInMilliseconds = SystemClock.uptimeMillis() - startTime;
            updatedTime = timeSwapBuff + timeInMilliseconds;
            int secs = (int) (updatedTime / 1000);
            int mins = secs / 60;
            secs = secs % 60;
            int milliseconds = (int) (updatedTime % 1000);
            timerValue.setText("" + mins + ":"
                    + String.format("%02d", secs) + ":"
                    + String.format("%03d", milliseconds));
            customHandler.postDelayed(this, 100);
        }
        catch (Exception err) {
            err.printStackTrace();
        }
    }
});

What I want to do is start the timer when the uploading starts. Then when the upload finishes stop the timer.

In the Runnable I added:

updateTimerThread.start();

Right after I set my text to "uploading"

In the Runnable when it gets to the "upload completed" line:

status1.setText("Upload completed" + " " + varr + "%");

I want the timer to stop so I can see the amount of time that each file took to upload.

The problem is that when it start the timer thread the program crash i used a break point and can't find why.

Secondly, how should I get the timer to stop? Will it stop automatically once the code is gets to the "upload completed" line? Then on the next file upload how can I get the timer to reset and start over again (That's why I need that on each "uploading" state the time will be reset and start over again, and then will stop again on the "upload completed" state.

This is the logcat:

09-14 15:36:59.385    2103-2103/com.test.webservertest E/AndroidRuntime﹕ FATAL EXCEPTION: main
    Process: com.test.webservertest, PID: 2103
    java.lang.IllegalThreadStateException: Thread already started
            at java.lang.Thread.checkNotStarted(Thread.java:849)
            at java.lang.Thread.start(Thread.java:1059)
            at com.test.webservertest.MainActivity$2$1.run(MainActivity.java:251)
            at android.os.Handler.handleCallback(Handler.java:739)
            at android.os.Handler.dispatchMessage(Handler.java:95)
            at android.os.Looper.loop(Looper.java:135)
            at android.app.ActivityThread.main(ActivityThread.java:5274)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:909)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:704)

Upvotes: 1

Views: 53

Answers (1)

Chathura Wijesinghe
Chathura Wijesinghe

Reputation: 3349

Are you trying to upload file ?, then use this Android Upload Service. Easily upload files in the background with automatic Android Notification Center progress indication

public void upload(final Context context) {
final UploadRequest request = new UploadRequest(context,
                                                "custom-upload-id",
                                                "http://www.yoursite.com/yourscript");

/*
 * parameter-name: is the name of the parameter that will contain file's data.
 * Pass "uploaded_file" if you're using the test PHP script
 *
 * custom-file-name.extension: is the file name seen by the server.
 * E.g. value of $_FILES["uploaded_file"]["name"] of the test PHP script
 */
request.addFileToUpload("/absolute/path/to/your/file",
                        "parameter-name",
                        "custom-file-name.extension",
                        "content-type"));

 try {
    //Start upload service and display the notification
    UploadService.startUpload(request);

 } catch (Exception exc) {
    //You will end up here only if you pass an incomplete UploadRequest
    Log.e("AndroidUploadService", exc.getLocalizedMessage(), exc);
 }

}

Upvotes: 1

Related Questions