无法在Android中将用户输入保存到数据库中

时间:2013-07-04 00:22:29

标签: android

我是Android新手,我正在开发一个将用户输入保存到数据库的应用程序。但是,由于某些原因,我无法看到用户按下“保存”按钮时所获得的数据。你能帮我保存这些代码中的值吗?

activity.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <Spinner 
        android:id="@+id/spn_District"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <Spinner 
        android:id="@+id/spn_Province"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <Spinner 
        android:id="@+id/spn_InfoType"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <TextView 
        android:id="@+id/txt_Date"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <TextView 
        android:id="@+id/txt_Remarks"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</LinearLayout>

Cons_IReport.java(构造函数)

public Cons_iReport(String district, String province, String infoType, String rDateObserved, String rRemarks){
    this._district = district;
    this._province = province;
    this._infoType = infoType;
    this._dateObserved = rDateObserved;
    this._remarks = rRemarks;
}

DatabaseHandler.java

public void SaveReport(Cons_iReport save){
    SQLiteDatabase db = this.getWritableDatabase();
    ContentValues values = new ContentValues();
    values.put(Constants.REPORT_DISTRICT, save.getDistrict()); 
    values.put(Constants.REPORT_PROVINCE, save.getProvince()); 
    values.put(Constants.REPORT_INFOTYPE, save.getInfoType()); 
    values.put(Constants.REPORT_DATEOBSERVED, save.getDateObserved()); 
    values.put(Constants.REPORT_REMARKS, save.getRemarks());

    db.insert(Constants.TABLE_REPORT, null, values);
    db.close(); 
}

MainActivity.java

btn_Save.setOnClickListener(new OnClickListener() {

    @Override
        public void onClick(View arg0) {
            String rDistrict = spn_District.getSelectedItem().toString();
            String rProvince = spn_Province.getSelectedItem().toString();
            String rInfoType = spn_InfoType.getSelectedItem().toString();
            String rDateObserved = txt_Date.getText().toString();
            String rRemarks = txt_Remarks.getText().toString();

            databaseHandler.SaveReport(new Cons_iReport(rDistrict, rProvince, rInfoType, rDateObserved, rRemarks));
            Toast.makeText(getApplicationContext(), "SAVED!\n" + rDistrict + "\n" + rProvince + "\n" + rInfoType +  "\n" + rDateObserved + "\n" + rRemarks, Toast.LENGTH_SHORT).show();
        }
}); 

1 个答案:

答案 0 :(得分:2)

这听起来不对,但不要db.close。对getWritableDatabase的后续调用将返回相同的,已经关闭的对象。如果使用相同的基础现在关闭对象,它也可能影响您从数据库读取的能力。

从您的模拟器中拉出db文件并在SQLite编辑器http://sqliteadmin.orbmu2k.de/中打开它,但如果您能找到更好的文件,请使用它。

该数据库中的表中是否有任何行?

另外,为了进行调试,请尝试使用insertOrThrow而不是insert,如果插入失败而不是静默失败,则会出现异常。