我无法在doInBackground()的ArrayList中添加对象

时间:2014-06-23 22:08:42

标签: 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: 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类扩展了我的对象类。删除此扩展程序解决了这个问题。

1 个答案:

答案 0 :(得分:0)

您的日志表明您的错误不是关于添加到ArrayList,而是关于AsyncTask

  
    

无法在未调用Looper.prepare()

的线程内创建处理程序   

如您所知,AsyncTask内部使用Handler。并且tbelhis会导致您的问题。 请在以下链接中查看答案:

AsyncTask and Looper.prepare() error