2016-08-24 53 views
0

我試圖在AsyncTask中使用SQLite數據庫,但我不知道如何在這個類中初始化它。任何人都可以幫助我嗎?如果有人有任何建議,我會很感激。在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}); 
} 

} 

回答

0

創建ReadRssBackground構造,並通過應用程序上下文和存儲。 (可在內部活動中使用getApplicationContext())在新的DatabaseHelper(上下文)中使用此上下文

+0

非常感謝!現在它工作正常! – Koss

2

在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 
}