我当前的代码成功上传了图片,但仍未显示显示Image uploaded successfully
的Toast消息。如何在成功上传图像后显示Toast消息?
这是我的代码
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();
这里是imageUpload方法
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;
}
答案 0 :(得分:5)
您正尝试在非UI线程中显示Toast,因此无法看到Toast
完成任务后使用Handler以显示Toast.its,以便更好地使用AsyncTask.
使用AsyncTask,添加imageUpload code in DoinBackground(...) method and return boolean to onPostExxecute(),and You can display Toast in OnPostExecute Method.
答案 1 :(得分:2)
我建议你在android中实现{{3>},这就是所谓的无痛线程。
在你的情况下,你可以在doInBackground()
方法中调用imageUpload(),从onPostExecute()
方法显示Toast,不需要关心线程。
答案 2 :(得分:1)
我不知道这是对还是错。你可以这样试试 -
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) {
}
}
});
}
我认为这会奏效。根据用户 - Paresh Mayani&amp; Samir Mangroliya对AsyncTask的建议也更好。