0
私は、AsynTaskで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でトーストを入れたときに、私はエラーを取得していトースト...()メソッド:以下の は、私が使用しているコードスニペットです。
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の背後にある理由は何ですか: 後はLogCat()出力に含まのですか?
あなたは、UIスレッドを更新することはできませんdoinbackgroundメソッドから、なぜこのエラーをgettしているのか、doinbackgroundメソッド –
からトーストを削除し、これをチェックしてください。http://stackoverflow.com/questions/11936048/android-asynctask-cant-create-handler-inside-スレッドルーザーと呼ばれることはありません – jayeshsolanki93
Ok ...私はそれを試みて、あなたに戻ってきます... –