2017-08-30 115 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。如果你认为我的问题被问得很好,你能否也给我一个赞成票? –