Java ListView不显示存储在SQLite数据库中的项
我刚刚为一个简单的持久化应用程序实现了一个SQLite数据库。但是,问题是,当我重新启动应用程序时,我没有存储在SQLite数据库中的数据。以下是我的SQLite助手类:Java ListView不显示存储在SQLite数据库中的项,java,android,sqlite,listview,Java,Android,Sqlite,Listview,我刚刚为一个简单的持久化应用程序实现了一个SQLite数据库。但是,问题是,当我重新启动应用程序时,我没有存储在SQLite数据库中的数据。以下是我的SQLite助手类: public class DatabaseHelper extends SQLiteOpenHelper { public static final String DATABASE_NAME = "todo.db"; public static final String TABLE_NAME = "stude
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("");
}
}
public类MainActivity扩展了AppCompatActivity{
数据库助手数据库助手;
私人最终int请求_代码=10;
ArrayList toDoItems=新的ArrayList();
阵列适配器;
列表视图列表项;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listItems=(ListView)findViewById(R.id.listViewItems);
adapter=newarrayadapter(这是android.R.layout.simple\u list\u item\u 1,toDoItems);
setAdapter(适配器);
databaseHelper=新的databaseHelper(此);
...
}
公共无效附加项(视图v){
EditText newItem=(EditText)findViewById(R.id.ItemInputItemText);
String item=newItem.getText().toString();
databaseHelper.insertData(项);
添加(项目);
newItem.setText(“”);
}
}
我相信我需要在
onCreate
方法中执行一些操作,但是我的addItem(视图v)
方法是通过按钮onClick调用的。执行此函数以获取值
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();
}
}
}
你的保存功能是正确的,只是你需要获得信息。正如@cristian\u franco所说,toDoItems是空的。您需要做的是在DatabaseHelper类中创建另一个方法,如下所示
public ArrayList<String> showStudents(){
ArrayList<String> list = new ArrayList<String>();
SQLiteDatabase db = this.getReadableDatabase();
String query = "SELECT * FROM " + TABLE_NAME;
Cursor cursor = db.rawQuery(query, null);
if (cursor.moveToFirst()) {
do {
list.add(cursor.getString(0)+" "+cursor.getString(1));
} while (cursor.moveToNext());
}
cursor.close();
db.close();
return list;
}
如果我的代码有任何错误,请告诉我。
我没有存储在SQLite数据库中的数据
-您是否已从设备上提取了数据库文件adb pull data/data/your.package.name/databases/your_database_name
进行检查-注意,需要根设备(又称android emulator)提取文件。还要检查insertData
中insert
的返回值-不管怎样,您都在任意返回true
。我有一个G5,它无法根目录。我不知道您为什么被否决。这成功了!我给了你一票。如果你认为我的问题问得很好,你能不能也给我一张赞成票?我只是注意到我没有投你反对票,所以我继续投了。如果你认为这是一个被问得很好的问题,你能不能也给我一票?
databaseHelper = new DatabaseHelper(this);
toDoItems=databaseHelper.showStudents();