Hi I am new to Android and I have a problem with using AsyncTask. I created an object called KelimeKutuphane
and I want to add objects an ArrayList in doInBackground but some errors have occured:
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
and This is the related part of my AsyncTaskKutup.java
that I use for adding objects to an 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);
}
}
}
Problem was solved thanks to CommonsWare. I extended my object class with Activity class for some reason. Removing this extension solved the problem.