您好我是Android新手,我在使用AsyncTask时遇到问题。我创建了一个名为KelimeKutuphane
的对象,我想在doInBackground中添加一个ArrayList对象但是发生了一些错误:
06-24 00:50:09.091: E/AndroidRuntime(3880): FATAL EXCEPTION: AsyncTask #1
06-24 00:50:09.091: E/AndroidRuntime(3880): java.lang.RuntimeException: An error occured while executing doInBackground()
06-24 00:50:09.091: E/AndroidRuntime(3880): at android.os.AsyncTask$3.done(AsyncTask.java:299)
06-24 00:50:09.091: E/AndroidRuntime(3880): at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
06-24 00:50:09.091: E/AndroidRuntime(3880): at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
06-24 00:50:09.091: E/AndroidRuntime(3880): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
06-24 00:50:09.091: E/AndroidRuntime(3880): at java.util.concurrent.FutureTask.run(FutureTask.java:137)
06-24 00:50:09.091: E/AndroidRuntime(3880): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
06-24 00:50:09.091: E/AndroidRuntime(3880): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
06-24 00:50:09.091: E/AndroidRuntime(3880): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
06-24 00:50:09.091: E/AndroidRuntime(3880): at java.lang.Thread.run(Thread.java:856)
06-24 00:50:09.091: E/AndroidRuntime(3880): Caused by: java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
06-24 00:50:09.091: E/AndroidRuntime(3880): at android.os.Handler.<init>(Handler.java:121)
06-24 00:50:09.091: E/AndroidRuntime(3880): at android.app.Activity.<init>(Activity.java:772)
06-24 00:50:09.091: E/AndroidRuntime(3880): at com.example.hangdeneme.KelimeKutuphane.<init>(KelimeKutuphane.java:30)
06-24 00:50:09.091: E/AndroidRuntime(3880): at com.example.hangdeneme.AsyncTaskKutup.doInBackground(AsyncTaskKutup.java:87)
06-24 00:50:09.091: E/AndroidRuntime(3880): at com.example.hangdeneme.AsyncTaskKutup.doInBackground(AsyncTaskKutup.java:1)
06-24 00:50:09.091: E/AndroidRuntime(3880): at android.os.AsyncTask$2.call(AsyncTask.java:287)
06-24 00:50:09.091: E/AndroidRuntime(3880): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
06-24 00:50:09.091: E/AndroidRuntime(3880): ... 5 more
这是我AsyncTaskKutup.java
的相关部分,用于将对象添加到ArrayList<KelimeKutuphane>
public class AsyncTaskKutup extends AsyncTask<String, String, ArrayList<KelimeKutuphane>> {
private Context context;
private ProgressDialog progressDialog;
ArrayList<KelimeKutuphane> tumKelimeler;
ArrayList<KelimeKutuphane> filtered;
private static int BITKI = 0;
private int kategoriNum;
private int turdakiKelimeSayisi = 10;
public AsyncTaskKutup(Context context){
super();
this.context = context;
}
@Override
protected void onPreExecute(){
progressDialog = ProgressDialog.show(context, "", "Loading...");
}
@Override
protected ArrayList<KelimeKutuphane> doInBackground(String... arg0) {
tumKelimeler = new ArrayList<KelimeKutuphane>();
//I have lots of those in here and when I delete those, this error goes:
tumKelimeler.add(new KelimeKutuphane("some text", BITKI, 1, "More Text"));
kelimeHazirla();
return filtered;
}
@Override
protected void onProgressUpdate(String... arg1) {
}
@Override
protected void onPostExecute(ArrayList<KelimeKutuphane> filtered){
progressDialog.dismiss();
}
public void kelimeHazirla() {
filtered = new ArrayList<KelimeKutuphane>();
for(KelimeKutuphane kelime : tumKelimeler){
if(kelime.getKelimeLevel() == 1 && filtered.size() < turdakiKelimeSayisi ){
filtered.add(kelime);
}
}
}
感谢CommonsWare解决了问题。出于某种原因,我使用Activity类扩展了我的对象类。删除此扩展程序解决了这个问题。
答案 0 :(得分:0)
您的日志表明您的错误不是关于添加到ArrayList,而是关于AsyncTask
无法在未调用Looper.prepare()
的线程内创建处理程序
如您所知,AsyncTask内部使用Handler。并且tbelhis会导致您的问题。 请在以下链接中查看答案: