Java 将用户数据保存到数据库并显示在ListView中

Java 将用户数据保存到数据库并显示在ListView中,java,android,sqlite,android-listview,Java,Android,Sqlite,Android Listview,我希望用户输入三个字段,日期、描述和时间,然后单击“提交”按钮。单击按钮时,我希望将此数据保存到数据库中。我希望用户能够单击“以前的日志”按钮,查看列表视图中显示的以前保存的数据 一般来说,我对数据库和android编程是新手,但我用这个网站和其他教程编写了一个基本代码,我认为这与正确的代码类似 这是单击“提交”按钮时将调用的方法: submit.setOnClickListener(new View.OnClickListener() { @Override

我希望用户输入三个字段,日期、描述和时间,然后单击“提交”按钮。单击按钮时,我希望将此数据保存到数据库中。我希望用户能够单击“以前的日志”按钮,查看列表视图中显示的以前保存的数据

一般来说,我对数据库和android编程是新手,但我用这个网站和其他教程编写了一个基本代码,我认为这与正确的代码类似

这是单击“提交”按钮时将调用的方法:

 submit.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            dateOfPractice = String.valueOf(etDate.getText().toString());
            time = Integer.toString(npHours.getValue()) + ":" + Integer.toString(npMinutes.getValue());
            description = String.valueOf(etDescription.getText().toString());
            db.insertPractice(dateOfPractice, time, description);
            Toast.makeText(getApplicationContext(), "Saved", Toast.LENGTH_SHORT).show();
        }
在前面的onCreate方法中,我将数据库适配器设置为

final DBAdapter db = new DBAdapter(this);
    db.open();
这是我的数据库适配器类(DBAdapter.java)

}

这是我以前的日志类,当它启动时,我希望显示数据的listview

public class PreviousPractices extends Activity {
ListView practiceList;
ArrayAdapter<String> adapter;
ArrayList<String> listItems = new ArrayList<String>();


protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.previous_practices_layout);


    DBAdapter db = new DBAdapter(this);
    List<Practice> pList = (List<Practice>) db.getAllPractices();
    for (Practice p: pList)
    {
        String log = "Id: "+p.getID()+" ,Date" + p.getDate() + " ,Time: " + p.getTime() + " ,Description: " + p.getDescription();
        // Writing Contacts to log
        Log.d("Practice: ", log);
    }

    db.getAllPractices();


    practiceList=(ListView)findViewById(R.id.practiceList);
    adapter = new ArrayAdapter<String>(this,
            android.R.layout.simple_list_item_1,listItems);
    practiceList.setAdapter(adapter);


}
我的问题是,当我在中键入三个字段的信息时,我认为它会保存下来,因为调用了上面的第一个方法(我使用toast进行了测试),但是当我尝试访问应该加载ListView的页面时,出现了一个错误,它会崩溃。
知道为什么会这样吗?此外,我不确定下面的代码是否完全准确,因此如果您有任何提示或修复,将非常有用。谢谢

请添加错误的堆栈跟踪。您给适配器的列表为空列表。你从不在任何地方添加任何项目。pList是您正在从数据库检索的列表。原因:java.lang.NullPointerException:尝试调用虚拟方法“android.database.Cursor android.database.sqlite.SQLiteDatabase.query”(java.lang.String,java.lang.String[],java.lang.String,java.lang.String[],java.lang.String,java.lang.String,java.lang.String)'对于空对象引用,我认为此错误与空列表有关。我认为我试图做的是,当我单击“提交”按钮时,使用用户信息调用方法db.insertPractice()。这会将其放入数据库,并使用**List pList=(List)db.getAllPractices();**我试图将pList设置为数据库中的数据,然后将其打印出来。这可能不起作用,我应该如何修复它?首先,我建议您尝试更改getAllPractices(),使其返回一个列表,以便更容易处理数据。然后您可以尝试将这些数据填入列表中。看一看。在那里你可以看到工作示例。请添加错误的堆栈跟踪。您给适配器的列表为空列表。你从不在任何地方添加任何项目。pList是您正在从数据库检索的列表。原因:java.lang.NullPointerException:尝试调用虚拟方法“android.database.Cursor android.database.sqlite.SQLiteDatabase.query”(java.lang.String,java.lang.String[],java.lang.String,java.lang.String[],java.lang.String,java.lang.String,java.lang.String)'对于空对象引用,我认为此错误与空列表有关。我认为我试图做的是,当我单击“提交”按钮时,使用用户信息调用方法db.insertPractice()。这会将其放入数据库,并使用**List pList=(List)db.getAllPractices();**我试图将pList设置为数据库中的数据,然后将其打印出来。这可能不起作用,我应该如何修复它?首先,我建议您尝试更改getAllPractices(),使其返回一个列表,以便更容易处理数据。然后您可以尝试将这些数据填入列表中。看一看。在那里你可以看到工作示例。请添加错误的堆栈跟踪。您给适配器的列表为空列表。你从不在任何地方添加任何项目。pList是您正在从数据库检索的列表。原因:java.lang.NullPointerException:尝试调用虚拟方法“android.database.Cursor android.database.sqlite.SQLiteDatabase.query”(java.lang.String,java.lang.String[],java.lang.String,java.lang.String[],java.lang.String,java.lang.String,java.lang.String)'对于空对象引用,我认为此错误与空列表有关。我认为我试图做的是,当我单击“提交”按钮时,使用用户信息调用方法db.insertPractice()。这会将其放入数据库,并使用**List pList=(List)db.getAllPractices();**我试图将pList设置为数据库中的数据,然后将其打印出来。这可能不起作用,我应该如何修复它?首先,我建议您尝试更改getAllPractices(),使其返回一个列表,以便更容易处理数据。然后您可以尝试将这些数据填入列表中。看一看。在这里,您可以看到工作示例。
public class PreviousPractices extends Activity {
ListView practiceList;
ArrayAdapter<String> adapter;
ArrayList<String> listItems = new ArrayList<String>();


protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.previous_practices_layout);


    DBAdapter db = new DBAdapter(this);
    List<Practice> pList = (List<Practice>) db.getAllPractices();
    for (Practice p: pList)
    {
        String log = "Id: "+p.getID()+" ,Date" + p.getDate() + " ,Time: " + p.getTime() + " ,Description: " + p.getDescription();
        // Writing Contacts to log
        Log.d("Practice: ", log);
    }

    db.getAllPractices();


    practiceList=(ListView)findViewById(R.id.practiceList);
    adapter = new ArrayAdapter<String>(this,
            android.R.layout.simple_list_item_1,listItems);
    practiceList.setAdapter(adapter);


}
public Practice(int id, String date, String time, String description)
{
    this.id = id; this.date = date; this.time = time; this.description = description;
}
public Practice(String date, String time, String description)
{
    this.date = date; this.time = time; this.description = description;

}