Android 我无法在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:

嗨,我是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

多亏了公共软件,问题才得以解决。出于某种原因,我用活动类扩展了我的对象类。删除此扩展解决了问题。

您的日志显示,您的错误不是关于添加到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);
                }


            }

        }