簡體   English   中英

在AsyncTask中使用SQLite

[英]Using SQLite in AsyncTask

我試圖在AsyncTask中使用SQLite數據庫,但我不知道如何在此類中初始化它。 誰能幫我嗎? 如果有人有任何建議,我將不勝感激。

public class ReadRssBackground extends AsyncTask<Context, Void, Void> {
  DatabaseHelper myDB;

@Override
protected Void doInBackground(Context... contexts) {                                    
    myDB = new DatabaseHelper(context);   // <--- how to do it right?
    checkXML(GetData());
    return null;
}

public void checkXML(Document data) {
    //here i try do read or write a new item in the DB
    myDB.insertData("2", "Tittel", "www.link.de","Stuff");
}

public Document GetData() {
    //here i get the document from a url
}
}

這是我的DatabaseHelper.class:

public class DatabaseHelper extends SQLiteOpenHelper {
    public static final String DATABASE_NAME = "title.db";
    public static final String TABLE_NAME = "feed_table";
    public static final String COL_1 = "ID";
    public static final String COL_2 = "TITLE";
    public static final String COL_3 = "LINK";
    public static final String COL_4 = "CATEGORY";


    public DatabaseHelper(Context context) {
        super(context, DATABASE_NAME, null, 1);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.e

xecSQL("create table " + TABLE_NAME + " (ID INTEGER PRIMARY KEY AUTOINCREMENT,TITLE TEXT,LINK TEXT)");
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
    onCreate(db);
}


public boolean insertData(String id,String title, String link, String category){
    SQLiteDatabase db = this.getWritableDatabase();
    ContentValues contentValues = new ContentValues();
    contentValues.put(COL_1,id);
    contentValues.put(COL_2,title);
    contentValues.put(COL_3,link);
    contentValues.put(COL_4,category);
    long result = db.insert(TABLE_NAME,null,contentValues);

    if(result==(-1))
        return false;
    else
        return true;
}

public Integer deleteData(String id) {
    SQLiteDatabase db = this.getWritableDatabase();
    return db.delete(TABLE_NAME, "ID = ?", new String[]{id});
}

}

在AsyncTask中找到以下用於SQLite初始化的代碼段。

DatabaseHelper myDB;
public class ReadRssBackground extends AsyncTask<Context, Void, Void> {      

  @Override
  protected void onPreExecute() {
    myDB = new DatabaseHelper(context); 
  }

  @Override
  protected void doInBackground(Context... contexts) {                                 
     checkXML(GetData());
     return null;
  }
}

public void checkXML(Document data) {       
    myDB.insertData("2", "Tittel", "www.link.de","Stuff");
}  

public Document GetData() {
    //here i get the document from a url
}

在ReadRssBackground中創建一個構造函數,並傳遞應用程序上下文並將其存儲。 (可以在活動內部使用getApplicationContext())在新的DatabaseHelper(context)中使用此上下文

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM