Reputation: 32893
My current code uploads image successfully but still it does not show Toast message which says Image uploaded successfully
. How can I show toast message after image is uploaded successfully?
Here is my code
public void onClick(View v) {
dialog = ProgressDialog.show(Camera.this, "", "Uploading file...", true);
new Thread() {
public void run() {
try {
//Toast.makeText(getBaseContext(), "File is uploading...", Toast.LENGTH_LONG).show();
if(imageUpload(globalUID, largeImagePath)) {
Toast.makeText(getApplicationContext(), "Image uploaded", Toast.LENGTH_LONG).show();
} else {
Toast.makeText(getApplicationContext(), "Error uploading image", Toast.LENGTH_LONG).show();
}
} catch (Exception e) {
}
}
}.start();
here is imageUpload method
public boolean imageUpload(String uid, String imagepath) {
boolean success = false;
//Bitmap bitmapOrg = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher);
Bitmap bitmapOrg = BitmapFactory.decodeFile(imagepath);
ByteArrayOutputStream bao = new ByteArrayOutputStream();
bitmapOrg.compress(Bitmap.CompressFormat.JPEG, 90, bao);
byte [] ba = bao.toByteArray();
String ba1=Base64.encodeToString(ba, 0);
ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
nameValuePairs.add(new BasicNameValuePair("image",ba1));
nameValuePairs.add(new BasicNameValuePair("uid", uid));
try {
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://www.example.info/androidfileupload/index.php");
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
HttpResponse response = httpclient.execute(httppost);
HttpEntity entity = response.getEntity();
if(response != null) {
Toast.makeText(getApplicationContext(), "File uploaded successfully", Toast.LENGTH_LONG).show();
success = true;
}
is = entity.getContent();
} catch(Exception e) {
Log.e("log_tag", "Error in http connection "+e.toString());
}
dialog.dismiss();
return success;
}
Upvotes: 0
Views: 970
Reputation: 24496
I don't know this is right or wrong. You can try like this -
public void onClick(View v)
{
ProgressDialog dialog = ProgressDialog.show(DummyUsageActivity.this, "", "Uploading file...", true);
this.runOnUiThread(new Runnable() {
public void run() {
try {
//Toast.makeText(getBaseContext(), "File is uploading...", Toast.LENGTH_LONG).show();
if(imageUpload(globalUID, largeImagePath)) {
Toast.makeText(DummyUsageActivity.this, "Image uploaded", Toast.LENGTH_LONG).show();
} else {
Toast.makeText(DummyUsageActivity.this, "Error uploading image", Toast.LENGTH_LONG).show();
}
} catch (Exception e) {
}
}
});
}
I think this will work. As per users - Paresh Mayani & Samir Mangroliya suggestion for AsyncTask also better to do this.
Upvotes: 1
Reputation: 40416
you are trying to display Toast in non UI Thread so can't see Toast
Use Handler after completion of Task to show Toast.its better to use AsyncTask.
Using AsyncTask,add your imageUpload code in DoinBackground(...) method and return boolean to onPostExxecute(),and You can display Toast in OnPostExecute Method.
Upvotes: 5
Reputation: 128428
I would suggest you to implement AsyncTask which is known as Painless Threading in android.
And in your case, you can call imageUpload() inside the doInBackground()
method, display Toast from onPostExecute()
method, no need to take care about Threads.
Upvotes: 2