Android 我无法在doInBackground()中的ArrayList中添加对象
嗨,我是Android新手,在使用AsyncTask时遇到了问题。我创建了一个名为KelimeKutuphane的对象,我想在doInBackground中添加一个ArrayList对象,但出现了一些错误:Android 我无法在doInBackground()中的ArrayList中添加对象,android,arraylist,android-asynctask,Android,Arraylist,Android Asynctask,嗨,我是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:
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
多亏了公共软件,问题才得以解决。出于某种原因,我用活动类扩展了我的对象类。删除此扩展解决了问题。您的日志显示,您的错误不是关于添加到ArrayList,而是关于AsyncTask 无法在未调用Looper.prepare的线程内创建处理程序 正如您所知,AsyncTask在内部使用一个处理程序。这会给你的案子带来麻烦。 请参见以下链接的答案:
堆栈跟踪表明问题出在KelimeKutuphane的构造函数中。你在那里干什么?谢谢你。我用“活动”类扩展了“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);
}
}
}