下面是我创建的异步类,我正在尝试在执行时实现对话框,并在完成时实现Toast。
无论如何都没有出现祝酒或对话。
我的asykTask:
public class EmailPictureService extends HTTPRequestAsyncTask {
Context context;
ProgressDialog dialog;
public EmailPictureService(Context context){
this.context = context;
//dialog = new ProgressDialog(context);
}
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected String doInBackground(Object... params) {
Log.v("Start EMAIL SERVICE","START YOPPPPPPPPPPPPPPPPPPPPPP!");
dialog = new ProgressDialog(context);
dialog.setMessage("Sending...");
dialog.setIndeterminate(true);
dialog.show();
HTTPInvoker invoker = new HTTPInvoker();
HttpResponse response = null;
EmailPicture emailPicture = new EmailPicture();
emailPicture.setDeviceType("TABLET");
emailPicture.setStoreId((String)params[1]);
emailPicture.setNotificationType("E");
emailPicture.setRecipientName((String)params[2]);
emailPicture.setRecipientEmail((String)params[3]);
String jsonString = JSONConverter.toJson(emailPicture);
response = invoker.invokePOSTFileService((String)params[0], jsonString, (File[])params[4]);
return parseHttpResponse(response);
}
@Override
protected void onPostExecute(String result) {
String msg = "";
if (dialog.isShowing()) {
dialog.dismiss();
}
if (result != null) {
JSONObject jsonObject = null;
long errorCode = 0;
try {
jsonObject = new JSONObject((String) result);
errorCode = jsonObject.getLong("errorCode");
if(errorCode<1){
msg ="Success, your picture has been sent";
}else{
msg = "Sorry, there was an error sending your picture. Please try again later.";
}
Log.i(Constants.TAG, "Error Code...." + errorCode);
Toast toast = Toast.makeText(context, msg, Toast.LENGTH_SHORT);
toast.show();
} catch (JSONException e1) {
Log.i(Constants.TAG, "Exception...." + e1);
Toast toast = Toast.makeText(context, "Failure: "+e1, Toast.LENGTH_SHORT);
toast.show();
e1.printStackTrace();
}
}
}
}
我如何从我的活动中调用它:
new EmailPictureService(this).execute(url,storeID,cusName, cusEmail, new File[]{file});
我的日志
答案 0 :(得分:1)
您不应尝试从doInBackground()
访问用户界面。 AsyncTasks和doInBackground()
的目的是避免阻碍UI线程...相反,您应该使用适当的方法预先形成UI工作:onPreExecute()
,onProgressUpdate()
,onPostExecute()
,等
答案 1 :(得分:1)
我怀疑吐司没有显示,因为你的结果总是为空。您的日志在帖子上显示错误
正如其他人所说,从onPreExecute()
开始你的进度对话框答案 2 :(得分:0)
我注意到你在doInBackground()中实例化了progressDialog。将其移至onPreExecute()。 doInBackground()只能用于非UI工作。 =)
这应该“解决”你的问题。