2017-08-30 116 views
1

我剛剛爲一個簡單的應用程序實現了一個SQLite數據庫以實現持久性。但是,問題是,當我重新啓動應用程序時,我沒有存儲在SQLite數據庫中的數據。以下是我的SQLite輔助類:ListView不顯示存儲在SQLite數據庫中的項目

public class DatabaseHelper extends SQLiteOpenHelper { 

    public static final String DATABASE_NAME = "todo.db"; 
    public static final String TABLE_NAME = "student"; 
    public static final String ID = "id"; 
    public static final String TO_DO = "todo"; 

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

    @Override 
    public void onCreate(SQLiteDatabase sqLiteDatabase) { 
     String CREATE_TO_DO_TABLE = "CREATE TABLE " 
       + TABLE_NAME 
       + "(" 
       + ID 
       + " INTEGER PRIMARY KEY AUTOINCREMENT, " 
       + TO_DO 
       + " TEXT" 
       + ")"; 
     sqLiteDatabase.execSQL(CREATE_TO_DO_TABLE); 
    } 

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

    public boolean insertData(String todo){ 
     SQLiteDatabase sqLiteDatabase = this.getWritableDatabase(); 
     ContentValues contentValues = new ContentValues(); 
     contentValues.put(TO_DO, todo); 
     sqLiteDatabase.insert(TABLE_NAME, null, contentValues); 

     return true; 
    } 
} 

在我MainActivity.java,我加入我的列表項目到數據庫以及ListView控件。

public class MainActivity extends AppCompatActivity { 
    DatabaseHelper databaseHelper; 
    private final int REQUEST_CODE = 10; 
    ArrayList <String> toDoItems = new ArrayList<>(); 
    ArrayAdapter<String> adapter; 
    ListView listItems; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     listItems = (ListView) findViewById(R.id.listViewItems); 
     adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, toDoItems); 
     listItems.setAdapter(adapter); 
     databaseHelper = new DatabaseHelper(this); 

     ... 
    } 

    public void addItem(View v){ 
     EditText newItem = (EditText) findViewById(R.id.itemInputEditText); 
     String item = newItem.getText().toString(); 
     databaseHelper.insertData(item); 
     adapter.add(item); 
     newItem.setText(""); 
    } 
} 

我相信我需要做的事情在onCreate方法,但我addItem(View v)方法是通過按鈕的onClick調用。

+0

'我沒有存儲在SQLite database'我的數據 - 你是否已經將數據庫文件從你的設備上拉下來了?adb pull data/data/your.package.name/databases/your_database_name'來檢查 - 註釋將需要rooted設備(又名android模擬器)來拉取文件。同時在'insertData'中檢查'insert'的返回值 - 無論如何你都會任意返回'true'。 –

+0

我有一個G5,它不能紮根。 –

回答

0

implment該功能獲取值,

public void getDatos(){ 
     SQLiteDatabase database = databaseHelper.getWritableDatabase(); 
     Cursor cursor = database.rawQuery("select * from student",null); 
     if (cursor.moveToFirst()) { 
      while (!cursor.isAfterLast()) { 
       String name = cursor.getString(cursor.getColumnIndex("todo")); 

       Toast.makeText(getApplicationContext(), name, Toast.LENGTH_LONG).show(); 
       cursor.moveToNext(); 
      } 
     } 
    } 

用於保存YOUT funciion是正確的,你只需要得到的信息

+0

我不知道你爲什麼陷入低谷。這工作!我給你一個upvote。如果你認爲我的問題被問得很好,你能否也給我一個贊成票? –