有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java将数据保存到数据库并在ListView中检索

我正在制作一个小的待办应用程序,但我被卡住了
这个想法是:

将数据保存到数据库->;在列表视图中检索它

目前,我的应用程序在按下“BUILD!”键后立即崩溃按钮,尽管我认为它应该只说“已保存!”(确保数据保存到数据库中)
对于如何在ListView中显示这些数据的一些提示,我们将不胜感激

附言:这是我的第一个应用,所以不要太苛刻

代码:

main活动

package com.example.mrti.todo2;

import 安卓.content.Context;
import 安卓.database.sqlite.SQLiteDatabase;
import 安卓.os.Bundle;
import 安卓.support.v7.app.AppCompatActivity;
import 安卓.view.View;
import 安卓.widget.ArrayAdapter;
import 安卓.widget.EditText;
import 安卓.widget.ListView;
import 安卓.widget.Toast;
import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {

TaskDbHelper taskDbHelper;
SQLiteDatabase SQLdb;
ArrayAdapter<String> itemsAdapter;
Context context;

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

    ListView lvItems = (ListView) findViewById(R.id.listView);
    ArrayList<String> items = new ArrayList<String>();

    itemsAdapter = new ArrayAdapter<String>(this,
            安卓.R.layout.simple_list_item_1, items);
    lvItems.setAdapter(itemsAdapter);


}

// ADDING YOUR FUTURE GOALS!
public void onBuildButton (View view){
    EditText dreamText = (EditText) findViewById(R.id.dreamText);
    String task = dreamText.getText().toString();

    //db
    taskDbHelper = new TaskDbHelper(context);
    SQLdb = taskDbHelper.getWritableDatabase();
    taskDbHelper.insertData(task, SQLdb);
    Toast.makeText(getBaseContext(), "Saved!", Toast.LENGTH_LONG).show();
    taskDbHelper.close();
}


}

TaskDBHelper。java

public class TaskDbHelper extends SQLiteOpenHelper {

private static final String DATABASE_NAME = "TASKS.db";
private static final int DB_VERSION = 1;
private static final String CREATE_QUERY =
                        "CREATE TABLE " +         TaskContract.newTaskInfo.TABLE_NAME + " ( " +
                        TaskContract.newTaskInfo.TASK_NAME + " TEXT NOT NULL);";


public TaskDbHelper(Context context) {
    super(context, DATABASE_NAME, null, DB_VERSION);
}

@Override
public void onCreate(SQLiteDatabase db) {
    db.execSQL(CREATE_QUERY);
    Log.e("DB Operations", "Table created...");
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    db.execSQL("DROP TABLE IF EXISTS " + TaskContract.newTaskInfo.TABLE_NAME);
    onCreate(db);
}
// For adding new data to database
public void insertData(String task, SQLiteDatabase db){
    ContentValues contentValues = new ContentValues();
    contentValues.put(TaskContract.newTaskInfo.TASK_NAME, task);
    db.insert(TaskContract.newTaskInfo.TABLE_NAME, null, contentValues);
        Log.e("DB Operations", "1 record added...");

}
}

任务合同。java

public class TaskContract {

public static abstract class newTaskInfo{
    public static final String TASK_NAME = "task_name"; // Table field
    public static final String TABLE_NAME = "task_info"; // Name of the table
}

共 (1) 个答案

  1. # 1 楼答案

    您的context变量为空且不必要

    活动是上下文,所以用它来代替

    taskDbHelper = new TaskDbHelper(MainActivity.this);