2017-10-17 50 views
-4
 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); 
} 

}

+0

不是'列'_id'不存在'足够吗? – Blackbelt

+0

我没有这样的列_id在我的数据库中。那就是为什么 – Suraj

+0

然后加一个。这是必需的。有类似的答案,在你开一个问题之前搜索它。 –

回答

0

要使用CursorAdapter类的database必须_id列作为官方文件states

适配器从一个游标到ListView控件公开数据。

光标必须包含一列名为“_id”或这个类不会 的工作。此外,如果 合并的游标在其“_id”列中具有重叠值,则对此类使用MergeCursor将不起作用。

所以代替你id_id在表中创建脚本以符合使用CursorAdapter类的要求。

+0

它再次显示异常!列“_id”不存在:( – Suraj

+0

删除并重新安装应用程序 – pleft

+0

好的..让我这样做 – Suraj