Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ListView不显示存储在SQLite数据库中的项_Java_Android_Sqlite_Listview - Fatal编程技术网

Java ListView不显示存储在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

我刚刚为一个简单的持久化应用程序实现了一个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("");
    }
}
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();