2013-10-13 83 views
1

我做了從數據庫sqlite顯示數據的應用程序,但由於方法startManagingCursor和構造函數SimpleCursorAdapter不推薦使用,因此在運行或構建時不會運行應用程序。方法startManagingCursor和構造函數SimpleCursorAdapter已棄用

這裏我的代碼

DatabaseHelper.java

package latihan.listviewsqlite; 

import android.content.ContentValues; 
import android.content.Context; 
import android.database.Cursor; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteOpenHelper; 

public class DatabaseHelper extends SQLiteOpenHelper{ 

private static final String DATABASE_NAME = "dbanime"; 
private static final String TABLE = "ANIME"; 
public static final String NAMA = "nama"; 
public static final String KEY_ID = "_id"; 

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

public void createTable(SQLiteDatabase db){ 
    db.execSQL("DROP TABLE IF EXIST ANIME"); 
    db.execSQL("CREATE TABLE if not exists ANIME (_id INTEGER PRIMARY KEY AUTOINCREMENT, nama TEXT"); 
} 

public void generateData(SQLiteDatabase db){ 
    ContentValues cv = new ContentValues(); 
    cv.put(NAMA, "Naruto Shipuuden"); 
    db.insert(TABLE, NAMA, cv); 
    cv.put(NAMA, "One Piece"); 
    db.insert(TABLE, NAMA, cv); 
    cv.put(NAMA, "Bleach"); 
    db.insert(TABLE, NAMA, cv); 
} 

public void deleteAllData(SQLiteDatabase db){ 
    db.delete(TABLE, null, null); 
} 

public Cursor fetchAllAnime(SQLiteDatabase db){ 
    return db.query(false, TABLE, new String[] {KEY_ID, NAMA}, null, null, null, null, null, null); 
} 

public void onCreate(SQLiteDatabase db){ 
    createTable(db); 
} 

public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion){ 

} 

} 

MainActivity.java

package latihan.listviewsqlite; 

import android.os.Bundle; 
import android.app.Activity; 
import android.database.Cursor; 
import android.database.sqlite.SQLiteDatabase; 
import android.view.Menu; 
import android.widget.ListView; 
import android.widget.SimpleCursorAdapter; 

public class MainActivity extends Activity { 

private DatabaseHelper dbHelper; 
private SQLiteDatabase db = null; 
private ListView listContent = null; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    dbHelper = new DatabaseHelper(this); 
    db = dbHelper.getWritableDatabase(); 
    dbHelper.deleteAllData(db); 
    dbHelper.generateData(db); 
    setContentView(R.layout.activity_main); 
    listContent = (ListView) findViewById(R.id.animeList); 
    isDataListView(); 


    //  setContentView(R.layout.activity_main); 
} 

private void isDataListView(){ 
    Cursor animeCursor; 

    animeCursor = dbHelper.fetchAllAnime(db); 

    startManagingCursor(animeCursor); 
    String[] from = new String[]{dbHelper.NAMA}; 
    int[] to = new int[]{R.id.txtAnime}; 

    SimpleCursorAdapter animeAdapter = new SimpleCursorAdapter(this, R.layout.row, animeCursor, from, to); 

    listContent.setAdapter(animeAdapter); 
} 

public void onDestroy(){ 
    super.onDestroy(); 
    try{ 
     db.close(); 
    }catch (Exception ex){ 

    } 
} 

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

} 

是有什麼錯在方法startManagingCursor編寫代碼,並構造SimpleCursorAdapter 我desperatel你需要你的幫助,謝謝

+0

請接受正確的答案,或者,至少,現有的評論。我們的同事需要時間並努力幫助您。 –

回答

1

首先,startManagingCursor()應該仍然有效。它並不理想,因爲它在主應用程序線程上執行數據庫I/O。在Android中,「不推薦」通常意味着「我們有其他我們認爲更好的建議您使用的東西」。這通常意味着你應該考慮遷移到它的替代品。

Loader框架是異步和事件驅動的。與現在不推薦使用的方法startManagingCursor()和consutructor simpleCursorAdapter相反。

如果您正在構建新代碼,您通常不應使用已棄用的API,儘管這取決於您的目標Android版本。

總之,儘管您的方法不推薦使用,但您的方法仍然可以正常工作,因爲您的問題與棄用有關,所以我相應地回答了。如果你想修正這個錯誤(正如工作中的那樣編碼)發佈錯誤日誌,我們可以嘗試找出原因。或者,如果你想改變你的代碼看看here欲瞭解更多信息Loaders

+0

現貨,優秀分析。應該已經被接受。 UPVOTED! :) –