我的应用程序在使用SQLite数据库检索任务,日期和在ListView上显示时崩溃

时间:2017-09-27 14:30:40

标签: android sqlite datetime

这是onClick文件的HomeActivity方法:

  public void onClick(View v) {

    Task=task.getText().toString();

    datee=date.getText().toString();

    boolean c= db.insertValues(Task,datee);

    if(c==true) {
        Toast.makeText(HomeActivity.this,"success",Toast.LENGTH_LONG).show();
    }
    else if(c==false) {
        Toast.makeText(HomeActivity.this,"failed",Toast.LENGTH_LONG).show();
    }
   Intent intent=new Intent(HomeActivity.this,DisplayActivity.class);
    startActivity(intent);
}

这是用于创建数据库和存储值的sqlitehelper java类:

public class DatabaseHelper extends SQLiteOpenHelper {

    public static final String DATABASE_NAME="AppDB";

    public static final int DATABASE_VERSION=1;

    public static final String TABLE_NAME="Users";

    public static final String Column1="id";

    public static final String Column2="task";

    public static final String Column4="ddate";

    public static final String Query="CREATE TABLE "+TABLE_NAME+"("+Column1+" NUMBER NOT NULL AUTO INCREMENT,"+Column2+" TEXT NOT NULL,"+Column3+" TEXT NOT NULL)";

    public DatabaseHelper(Context context) {

        super(context,DATABASE_NAME,null,DATABASE_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(Query);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

    }
    public boolean insertValues(String task,String daate) {
        SQLiteDatabase db=this.getWritableDatabase();
        ContentValues values=new ContentValues();
        values.put(Column2,task);
        values.put(Column3,daate);
        long rows=db.insertOrThrow(TABLE_NAME,null,values);
        if(rows>0){
            return true;
        }
        else
            return false;
    }
     public Cursor retrieveValues() {
        SQLiteDatabase db=this.getReadableDatabase();
        Cursor cr=db.rawQuery("select "+Column2+","+Column3+","+Column4+" from "+TABLE_NAME,null);
        return cr;
    }
}

另一个活动displayActivity用于检索值 -

    public class DisplayActivity extends AppCompatActivity {
    ListView tasklist;
    DatabaseHelper db;
    @Override
    protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_show);
    tasklist=(ListView)findViewById(R.id.taskList);
    db=new DatabaseHelper(this);
    Cursor cursor=db.retrieveValues();
    CustomAdapter todoadapter=new CustomAdapter(this,cursor);
    tasklist.setAdapter(todoadapter);
}

}

,CustomAdapter类为 -

    public class CustomAdapter extends CursorAdapter {
    TextView task,daate;
    public CustomAdapter(Context context, Cursor cursor) {
    super(context, cursor, 0);
}

    // The newView method is used to inflate a new view and return it,
    // you don't bind any data to the view at this point.
    @Override
    public View newView(Context context, Cursor cursor, ViewGroup parent) {
    return LayoutInflater.from(context).inflate(R.layout.adapter, parent, 
    false);
}

    // The bindView method is used to bind all data to a given view
    // such as setting the text on a TextView.
    @Override
    public void bindView(View view, Context context, Cursor cursor) {
    // Find fields to populate in inflated template
    task=(TextView)view.findViewById(R.id.dynamicTask);
    daate=(TextView)view.findViewById(R.id.dynamicDate);
    String Task=cursor.getString(cursor.getColumnIndex("task"));
    String Daate=cursor.getString(cursor.getColumnIndex("ddate"));
    task.setText(Task);
    daate.setText(Daate);
}

}

我的应用程序在单击“保存”按钮时崩溃,值存储在数据库中但是当我检索值时显示异常 -

  10-15 17:54:13.395 4139-4139/com.example.bestbuy.mytry E/AndroidRuntime: 
  FATAL
  EXCEPTION: main
                                                                     Process: com.example.bestbuy.mytry, PID: 4139
                                                                     java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.bestbuy.mytry/com.example.bestbuy.mytry.DisplayActivity}: java.lang.IllegalArgumentException: column '_id' does not exist
                                                                         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2325)
                                                                         at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387)
                                                                         at android.app.ActivityThread.access$800(ActivityThread.java:151)
                                                                         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)
                                                                         at android.os.Handler.dispatchMessage(Handler.java:102)
                                                                         at android.os.Looper.loop(Looper.java:135)
                                                                         at android.app.ActivityThread.main(ActivityThread.java:5254)
                                                                         at java.lang.reflect.Method.invoke(Native Method)
                                                                         at java.lang.reflect.Method.invoke(Method.java:372)
                                                                         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:902)
                                                                         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:697)
                                                                      Caused by: java.lang.IllegalArgumentException: column '_id' does not exist
                                                                         at android.database.AbstractCursor.getColumnIndexOrThrow(AbstractCursor.java:303)
                                                                         at android.widget.CursorAdapter.init(CursorAdapter.java:172)
                                                                         at android.widget.CursorAdapter.<init>(CursorAdapter.java:149)
                                                                         at com.example.bestbuy.mytry.CustomAdapter.<init>(CustomAdapter.java:19)
                                                                         at com.example.bestbuy.mytry.DisplayActivity.onCreate(DisplayActivity.java:18)
                                                                         at android.app.Activity.performCreate(Activity.java:6033)
                                                                         at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106)
                                                                         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2278)
                                                                         at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387) 
                                                                         at android.app.ActivityThread.access$800(ActivityThread.java:151) 
                                                                         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303) 
                                                                         at android.os.Handler.dispatchMessage(Handler.java:102) 
                                                                         at android.os.Looper.loop(Looper.java:135) 
                                                                         at android.app.ActivityThread.main(ActivityThread.java:5254) 
                                                                         at java.lang.reflect.Method.invoke(Native Method) 
                                                                         at java.lang.reflect.Method.invoke(Method.java:372) 
                                                                         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:902) 
                                                                         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:697) 

我无法解释异常。如果你想要更多细节,请告诉我!请帮我纠正..谢谢

1 个答案:

答案 0 :(得分:0)

您可以使用text数据类型在创建表时在SQLite中存储日期。

以UTC格式存储日期,如果您使用日期时间(&#39;现在&#39;)(yyyy-MM-dd HH:mm:ss),默认情况下将允许按日期列进行排序。

从SQLite表中检索日期作为字符串,然后您可以根据需要将它们转换为使用Calendar或DateUtils.formatDateTime方法的格式。