0
我试图演示一个AsyncTask和Asynctask中方法的执行顺序。我已经在每一种方法吐司吐司看到的顺序。 以下是代码片段我用:doInBackground()中的致命异常
private class UploadImage extends AsyncTask<Void, Void, Void> {
Bitmap image;
String name;
public UploadImage(Bitmap image, String name){
this.image = image;
this.name = name;
Toast.makeText(getApplicationContext(), "Constructor - UpImg",Toast.LENGTH_SHORT).show();
}
@Override
protected Void doInBackground(Void... arg0) {
Toast.makeText(getApplicationContext(), "DoinBgd - UpImg",Toast.LENGTH_SHORT).show();
/* ByteArrayOutputStream baos = new ByteArrayOutputStream();
image.compress(Bitmap.CompressFormat.PNG, 100, baos);
String encodedImage = Base64.encodeToString(baos.toByteArray(), Base64.DEFAULT);
Toast.makeText(getApplicationContext(), "DoInBgd - UpImg",Toast.LENGTH_LONG).show();
ArrayList<NameValuePair> dataToSend = new ArrayList();
dataToSend.add(new BasicNameValuePair("image", encodedImage));
dataToSend.add(new BasicNameValuePair("name", name));
HttpParams httpRequestParams = getHttpRequestParams();
HttpClient client = new DefaultHttpClient(httpRequestParams);
HttpPost post = new HttpPost(SERVERADDRESS + "/SavePicture.php");
try{
post.setEntity(new UrlEncodedFormEntity(dataToSend));
client.execute(post);
}catch(Exception e)
{
e.printStackTrace();
}*/
return null;
}
@Override
protected void onPostExecute(Void result) {
// TODO Auto-generated method stub
Toast.makeText(getApplicationContext(), "OnPost exec - UpImg",Toast.LENGTH_SHORT).show();
super.onPostExecute(result);
//Toast.makeText(getApplicationContext(), "Image Uploaded" , Toast.LENGTH_SHORT).show();
}
@Override
protected void onPreExecute() {
// TODO Auto-generated method stub
Toast.makeText(getApplicationContext(), "PreExec - UpImg",Toast.LENGTH_SHORT).show();
/*ByteArrayOutputStream baos = new ByteArrayOutputStream();
image.compress(Bitmap.CompressFormat.PNG, 100, baos);
String encodedImage = Base64.encodeToString(baos.toByteArray(), Base64.DEFAULT); */
super.onPreExecute();
}
}
在其他方法正确显示up.But,我得到的错误,当我把土司doInBac祝酒词...()方法。 以下是logcat的()输出中:
05-17 10:38:51.888: E/AndroidRuntime(18508): FATAL EXCEPTION: AsyncTask #3
05-17 10:38:51.888: E/AndroidRuntime(18508): java.lang.RuntimeException: An error occured while executing doInBackground()
05-17 10:38:51.888: E/AndroidRuntime(18508): at android.os.AsyncTask$3.done(AsyncTask.java:299)
05-17 10:38:51.888: E/AndroidRuntime(18508): at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:352)
05-17 10:38:51.888: E/AndroidRuntime(18508): at java.util.concurrent.FutureTask.setException(FutureTask.java:219)
05-17 10:38:51.888: E/AndroidRuntime(18508): at java.util.concurrent.FutureTask.run(FutureTask.java:239)
05-17 10:38:51.888: E/AndroidRuntime(18508): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
05-17 10:38:51.888: E/AndroidRuntime(18508): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
05-17 10:38:51.888: E/AndroidRuntime(18508): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
05-17 10:38:51.888: E/AndroidRuntime(18508): at java.lang.Thread.run(Thread.java:856)
05-17 10:38:51.888: E/AndroidRuntime(18508): Caused by: java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
05-17 10:38:51.888: E/AndroidRuntime(18508): at android.os.Handler.<init>(Handler.java:197)
05-17 10:38:51.888: E/AndroidRuntime(18508): at android.os.Handler.<init>(Handler.java:111)
05-17 10:38:51.888: E/AndroidRuntime(18508): at android.widget.Toast$TN.<init>(Toast.java:324)
05-17 10:38:51.888: E/AndroidRuntime(18508): at android.widget.Toast.<init>(Toast.java:91)
05-17 10:38:51.888: E/AndroidRuntime(18508): at android.widget.Toast.makeText(Toast.java:238)
05-17 10:38:51.888: E/AndroidRuntime(18508): at com.msrohit.imageselect.MainActivity$UploadImage.doInBackground(MainActivity.java:191)
05-17 10:38:51.888: E/AndroidRuntime(18508): at com.msrohit.imageselect.MainActivity$UploadImage.doInBackground(MainActivity.java:1)
什么是背后的RuntimeException的原因是什么?
不能更新UI线程从doinbackground方法,这就是为什么你gettting这个错误,你必须从doinbackground方法 –
删除吐司,并检查这个http://stackoverflow.com/questions/11936048/android-asynctask-cant-create-handler-inside-线程那不是所谓的looper – jayeshsolanki93
好吧...我会尽力回复你... –