Reputation: 403
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
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