gpt4 book ai didi

java - ListView 不显示存储在 SQLite 数据库中的项目

转载 作者:行者123 更新时间:2023-11-30 10:25:45 25 4
gpt4 key购买 nike

我刚刚为一个简单易用的持久性应用程序实现了一个 SQLite 数据库。但是,问题是当我重新启动应用程序时,我没有存储在 SQLite 数据库中的数据。以下是我的 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 调用的。

最佳答案

正如@cristian_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;
}

然后像这样分配给DoItems

databaseHelper = new DatabaseHelper(this);    
toDoItems=databaseHelper.showStudents();

如果我的代码有任何错误,请告诉我。

关于java - ListView 不显示存储在 SQLite 数据库中的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45971275/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com