E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.bestbuy.mytry, PID: 32644
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)
當我從sqlitedatabase中檢索數據並將其顯示在ListView中時,會出現此異常。我無法解釋這一點。請幫助理解它,以及這與我的應用程序的實際意義有何關係。如果你想要更多的數據,請告訴我。謝謝這個例外非法的爭論是什麼意思?
這是我sqlitedatabase代碼 -
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 Column3="ddate";
public static final String Query="CREATE TABLE "+TABLE_NAME+"("+Column1+" INTEGER PRIMARY KEY AUTOINCREMENT,"+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 datee) {
SQLiteDatabase db=this.getWritableDatabase();
ContentValues values=new ContentValues();
values.put(Column2,task);
values.put(Column3,datee);
long rows=db.insertOrThrow(TABLE_NAME,null,values);
if(rows>0){
return true;
}
else
return false;
}
public Cursor retrieveValues() {
SQLiteDatabase db=this.getWritableDatabase();
Cursor cursor=db.rawQuery("SELECT * FROM Users",null);
return cursor;
}
這是我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);
}
}
這是我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);
}
}
不是'列'_id'不存在'足夠嗎? – Blackbelt
我沒有這樣的列_id在我的數據庫中。那就是爲什麼 – Suraj
然後加一個。這是必需的。有類似的答案,在你開一個問題之前搜索它。 –