アンドロイド 2.3.3
私は AsyncTask を初めて使用するので、私の実装が正しい場合とそうでない場合があります。AsyncTask を使用してデータベースにデータを挿入する必要があります。
エラーや例外は発生していませんが、データベースが作成されていません。問題がデータベースに関連しているのか、asynctask に関連しているのかわかりませんでした。だから私は以下のコードを提供しています。ご覧ください。
データベースファイル :::
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
public class Database_SpeedDial extends SQLiteOpenHelper{
static String name = "speeddial_contacts";
static int version = 1;
SQLiteDatabase db;
public Database_SpeedDial(Context context) {
super(context, name, null, version);
// TODO Auto-generated constructor stub
db = getWritableDatabase();
}
@Override
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
db.execSQL("CREATE TABLE IF NOT EXISTS contacts(count INTEGER, image_url TEXT, name TEXT, number TEXT, bool INTEGER)");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
}
public void insert_row(int count, String image_url, String name, String number, int bool) {
// TODO Auto-generated method stub
db.execSQL("INSERT INTO contacts VALUES('"+ count +"', '"+ image_url +"', '"+ name +"', '"+ number +"', '"+ bool +"')");
}
}
これが私のJavaコードです:::
public class Class_Add_Contact extends Activity implements OnClickListener {
Database_SpeedDial dbObj;
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()) {
case R.id.btn_addcontact_add:
System.out.println("Inside onClick");
// Using AsyncTask
// alImage, alContactName ,.... are ArrayList<String>
InsertData id = new InsertData(alImage, alContactName, alPhoneNumber, alBoolean);
id.execute();
System.out.println("Finished Inserting");
break;
case R.id.btn_addcontact_cancel:
System.out.println("Cancel button clicked");
break;
default:
break;
}
}
private class InsertData extends AsyncTask<Void, Void, Void>{
ArrayList<String> alImage_insertdata;
ArrayList<String> alContactName_insertdata;
ArrayList<String> alPhoneNumber_insertdata;
ArrayList<Boolean> alBoolean_insertdata;
public InsertData(ArrayList<String> alImage, ArrayList<String> alContactName,
ArrayList<String> alPhoneNumber, ArrayList<Boolean> alBoolean)
{
alImage_insertdata = alImage;
alContactName_insertdata = alContactName;
alPhoneNumber_insertdata = alPhoneNumber;
alBoolean_insertdata = alBoolean;
}
@Override
protected void onPreExecute() {
System.out.println("Inside onPreExecute");
}
@Override
protected Void doInBackground(Void... params) {
// TODO Auto-generated method stub
System.out.println("Inside doInBackground");
//dbObj = new Database_SpeedDial(this) -> I used this in onCreate()
// of the main class but didn't work, so shifted it here...
// This doesn't matter i guess...
dbObj = new Database_SpeedDial(Class_Add_Contact.this);
for(int i=0; i< alBoolean_insertdata.size();i++)
{
if(alBoolean.get(i))
{
dbObj.insert_row(i+1, alImage_insertdata.get(i).toString(),
alContactName_insertdata.get(i).toString(),
alPhoneNumber_insertdata.get(i).toString(),
1);
}
else
{
dbObj.insert_row(i+1, alImage_insertdata.get(i).toString(),
alContactName_insertdata.get(i).toString(),
alPhoneNumber_insertdata.get(i).toString(),
0);
}
}
return null;
}
@Override
protected void onPostExecute(Void res) {
System.out.println("Inside onPostExecute");
}
}
}
DDMS からの画像 :::
コードは問題なく実行されますが、データベースは作成されません。何が問題なのですか?