Wednesday, April 10, 2013

[android help] cant use AsyncTask in my activity


I have a problem with using AsyncTask..When I try to use AsyncTask I get error..But when I remove it every thing works fine..Can some one help me abut this?I also searched and find that I must add onpause() but It didnot work.Here is my code



package co.tosca.persianpoem;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

import android.os.AsyncTask;
import android.os.Bundle;
import android.app.Activity;
import android.app.ProgressDialog;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.ListView;
import android.widget.Toast;

public class Database_list extends Activity {

persian_poem_class main=new persian_poem_class(this);
public List selected_databases = new ArrayList();
public ProgressDialog pd;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_database_list);
File path=new File(ClubCP.SDcardPath+"/temp/database/");
Listfile_lists = main.directoryPath(path,false);
Log.i("file_list",file_lists.toString());
ListView Database_list=(ListView)findViewById(R.id.database_list);
final InteractiveArrayAdapter arrayadapter=new InteractiveArrayAdapter(this,file_lists);
Database_list.setAdapter(arrayadapter);
Button build =(Button)findViewById(R.id.btn_build_database);
build.setOnClickListener(new Button.OnClickListener() {
public void onClick(View v) {
selected_databases=arrayadapter.getSelectedItems();
if(selected_databases.isEmpty()!=true){
new bulid_database().execute();

}
else{
Toast.makeText(Database_list.this, "At least select one database", 1).show();
}
}
});
}
@Override
public void onPause()
{
super.onPause();
if(pd != null)
pd.dismiss();
}
private class bulid_database extends AsyncTask {

// Begin - can use UI thread here
protected void onPreExecute() {
pd = ProgressDialog.show(Database_list.this,"","Please wait...", true,false);
}
// this is the SLOW background thread taking care of heavy tasks
// cannot directly change UI
protected Void doInBackground(final String... args) {
// simulate here the slow activity
main.emptyDB();
main.creatDB(8);
for (int i =0; i < selected_databases.size(); i++) {


main.attachDatabase(selected_databases.get(i));
//publishProgress((long)i);
}
return null;
}
// periodic updates - it is OK to change UI
@Override
protected void onProgressUpdate(Long... value) {
pd.setMessage("still working");
}
// End - can use UI thread here
protected void onPostExecute(final Void unused) {
if (pd!=null) {
pd.dismiss();
}
}
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.database_list, menu);
return true;
}

}


and here Is error



04-10 09:39:15.467: W/dalvikvm(3411): threadid=12: thread exiting with uncaught exception (group=0x2b542210)
04-10 09:39:15.497: E/AndroidRuntime(3411): FATAL EXCEPTION: AsyncTask #1
04-10 09:39:15.497: E/AndroidRuntime(3411): java.lang.RuntimeException: An error occured while executing doInBackground()
04-10 09:39:15.497: E/AndroidRuntime(3411): at android.os.AsyncTask$3.done(AsyncTask.java:278)
04-10 09:39:15.497: E/AndroidRuntime(3411): at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
04-10 09:39:15.497: E/AndroidRuntime(3411): at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
04-10 09:39:15.497: E/AndroidRuntime(3411): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
04-10 09:39:15.497: E/AndroidRuntime(3411): at java.util.concurrent.FutureTask.run(FutureTask.java:137)
04-10 09:39:15.497: E/AndroidRuntime(3411): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:208)
04-10 09:39:15.497: E/AndroidRuntime(3411): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
04-10 09:39:15.497: E/AndroidRuntime(3411): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
04-10 09:39:15.497: E/AndroidRuntime(3411): at java.lang.Thread.run(Thread.java:856)
04-10 09:39:15.497: E/AndroidRuntime(3411): Caused by: java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
04-10 09:39:15.497: E/AndroidRuntime(3411): at android.os.Handler.(Handler.java:121)
04-10 09:39:15.497: E/AndroidRuntime(3411): at android.widget.Toast$TN.(Toast.java:317)
04-10 09:39:15.497: E/AndroidRuntime(3411): at android.widget.Toast.(Toast.java:91)
04-10 09:39:15.497: E/AndroidRuntime(3411): at android.widget.Toast.makeText(Toast.java:233)
04-10 09:39:15.497: E/AndroidRuntime(3411): at co.tosca.persianpoem.persian_poem_class.creatDB(persian_poem_class.java:224)
04-10 09:39:15.497: E/AndroidRuntime(3411): at co.tosca.persianpoem.Database_list$bulid_database.doInBackground(Database_list.java:65)
04-10 09:39:15.497: E/AndroidRuntime(3411): at co.tosca.persianpoem.Database_list$bulid_database.doInBackground(Database_list.java:1)
04-10 09:39:15.497: E/AndroidRuntime(3411): at android.os.AsyncTask$2.call(AsyncTask.java:264)
04-10 09:39:15.497: E/AndroidRuntime(3411): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
04-10 09:39:15.497: E/AndroidRuntime(3411): ... 5 more


here is attach_database



public void attachDatabase(String database_name){
Log.i("attach_database",database_name);
//closeMyDb();
//openMyDb();
Db.close();
Db = SQLiteDatabase.openDatabase(ClubCP.DbPath, null, SQLiteDatabase.CREATE_IF_NECESSARY);
try{
String sql="attach '"+ClubCP.SDcardPath+"/temp/database/"+database_name+"' as toMerge; insert into cat select * from toMerge.cat; insert into poem select * from toMerge.poem; insert into verse select * from toMerge.verse; insert into poet select * from toMerge.poet;detach database toMerge;";
String[] queries = sql.split(";");

for(String query : queries){
Db.execSQL(query);
}
Db.close();
}
catch (Exception e)
{
Toast.makeText(c, e.getMessage(), Toast.LENGTH_SHORT).show();
Log.i("attach_database",e.getMessage());
}

}


I already searched and find this similar questions but problem still happens progressdialog-how-to-prevent-leaked-window



.

stackoverflow.comm

No comments:

Post a Comment

Google Voice on T-Mobile? [General]

Google Voice on T-Mobile? So I recently switched from a GNex on Verizon to a Moto X DE on T-Mobile. I had always used Google Voice for my v...