Java SimpleCrsorAdaptor使我的android应用程序意外退出
因此,在这个列表视图中,我想显示数据库中所有注册学生的全名和电子邮件。我成功地获取了光标和所有数据,但一旦我将其绑定到SimpleCrsorAdaptor,我的应用程序就崩溃了。。 请帮忙。。。。。。 下面是Java和各自的XML资源代码 Java代码:Java SimpleCrsorAdaptor使我的android应用程序意外退出,java,android,xml,listview,Java,Android,Xml,Listview,因此,在这个列表视图中,我想显示数据库中所有注册学生的全名和电子邮件。我成功地获取了光标和所有数据,但一旦我将其绑定到SimpleCrsorAdaptor,我的应用程序就崩溃了。。 请帮忙。。。。。。 下面是Java和各自的XML资源代码 Java代码: package thedev.rdmuniversal.com.smartclass; import android.content.Context; import android.content.Intent; import android
package thedev.rdmuniversal.com.smartclass;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.Toast;
public class studentListActivity extends AppCompatActivity {
Context octx = this;
Intent o_intent;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_student_list);
o_intent = getIntent();
populateListView();
}
public void populateListView(){
db_handler odbh = new db_handler(octx);
Cursor stuListCursor = odbh.getStudentList(odbh);
stuListCursor.moveToFirst();
String[] fromCols = new String[]{
DbDefine.db_Info.USER_NAME_COL,
DbDefine.db_Info.USER_FULL_NAME
};
int[] toView = new int[]{
R.id.userNameElement_lbl,
R.id.fullNameElement_lbl
};
SimpleCursorAdapter csa = new SimpleCursorAdapter(
octx,
R.layout.student_list_row,
stuListCursor,
fromCols,
toView
);
ListView myls = (ListView) findViewById(R.id.stuListView);
myls.setAdapter(csa);
Toast.makeText(getBaseContext(), "len >> "+stuListCursor.getCount()+" :",Toast.LENGTH_LONG).show();
}
}
ListView的XML设计文件(activity\u student\u list.XML)
DbDefine.db\u Info.USER\u ID\u COL
的值应为\u ID
。如果不是,则将其设置为“是”,并在光标中获取该值
SimpleCursorAdapter
需要一个光标
,它有一个列\u id
更新
改变
public static final String USER_ID_COL = "user_id";
到
然后
String[] projection= {
DbDefine.db_Info.USER_NAME_COL,
DbDefine.db_Info.USER_PASS_COL
};
到
保持像以前一样创建表查询
注意:应用这些更改后,您必须先从phone/emulator卸载应用程序,然后再重新安装(如新安装)。请发布您的logcat错误跟踪和活动的完整代码。@Rohit5k2:oki,立即发布。。。请稍候…@Rohit5k2:我已经更新了问题,请检查…问题在db\u handler
中。请把它的代码也贴出来。。在一秒钟内发布..这个查询正确吗??公共字符串CREATE\u QUERY\u USERINFO=“CREATE TABLE”+DbDefine.db\u Info.TABLE\u NAME+”(“+DbDefine.db\u Info.\u ID+”整型主键,“+DbDefine.db\u Info.USER\u NAME\u COL+”TEXT,“+DbDefine.db\u Info.USER\u PASS\u COL+”TEXT,“+DbDefine.db\u Info.USER\u COL+”TEXT,“+DbDefine.db\u Info.USER\u全名+”TEXT,”+DbDefine.db_Info.USER_CLASS+“TEXT”,+DbDefine.db_Info.USER_DIV+“TEXT”);我的意思是在类DbDefine.db_Info
中DbDefine.db_Info.\u ID
的值是多少?如果仍然无法获取,则应该是\u id
。发布DbDefine
类的代码。问题更新,请检查,谢谢您的帮助。。。我现在真的很惭愧-(
02-23 19:56:22.871 21295-21295/? E/AndroidRuntime: FATAL EXCEPTION: main
Process: thedev.rdmuniversal.com.smartclass, PID: 21295
java.lang.RuntimeException: Unable to start activity ComponentInfo{thedev.rdmuniversal.com.smartclass/thedev.rdmuniversal.com.smartclass.studentListActivity}: java.lang.IllegalArgumentException: column '_id' does not exist
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
at android.app.ActivityThread.-wrap11(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
Caused by: java.lang.IllegalArgumentException: column '_id' does not exist
at android.database.AbstractCursor.getColumnIndexOrThrow(AbstractCursor.java:333)
at android.widget.CursorAdapter.init(CursorAdapter.java:180)
at android.widget.CursorAdapter.<init>(CursorAdapter.java:128)
at android.widget.ResourceCursorAdapter.<init>(ResourceCursorAdapter.java:55)
at android.widget.SimpleCursorAdapter.<init>(SimpleCursorAdapter.java:78)
at thedev.rdmuniversal.com.smartclass.studentListActivity.populateListView(studentListActivity.java:41)
at thedev.rdmuniversal.com.smartclass.studentListActivity.onCreate(studentListActivity.java:23)
at android.app.Activity.performCreate(Activity.java:6251)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
at android.app.ActivityThread.-wrap11(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
package thedev.rdmuniversal.com.smartclass;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
/**
*
* Created by rohitmahindrakar on 19/02/16.
*
*/
public class db_handler extends SQLiteOpenHelper {
Context octx;
public static final int database_version = 1;
public String CREATE_QUERY_USERINFO = "CREATE TABLE "+DbDefine.db_Info.TABLE_NAME+" ("+DbDefine.db_Info.USER_ID_COL+" INTEGER PRIMARY KEY, "+DbDefine.db_Info.USER_NAME_COL+" TEXT, "+DbDefine.db_Info.USER_PASS_COL+" TEXT, "+DbDefine.db_Info
.USER_LVL_COL+" TEXT, "+DbDefine.db_Info.USER_FULL_NAME+" TEXT, "+ DbDefine
.db_Info.USER_CLASS+" TEXT, "+ DbDefine.db_Info.USER_DIV+" TEXT );";
public db_handler(Context context) {
super(context, DbDefine.db_Info.DATABASE_NAME, null, database_version);
Log.d("DB_OPRT", "DB Created");
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(CREATE_QUERY_USERINFO);
Log.d("DB_OPRT", "Table Created");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
public void putAdminInfo(db_handler dbh){
// check if admin is avaliable >>
SQLiteDatabase oSQL = dbh.getReadableDatabase();
String[] projection= {
DbDefine.db_Info.USER_NAME_COL,
DbDefine.db_Info.USER_PASS_COL
};
String selection = "`user_name` = ? AND `user_pass` = ?";
String[] selectionArgs = {
"admin",
"passw"
};
Cursor oCurson = oSQL.query(
DbDefine.db_Info.TABLE_NAME, // table to query
projection, // rows to return
selection, // rows for where
selectionArgs, // conditions for where
null, // dont group th rows
null, // dont filter by row groups
null // dont sort
);
oCurson.moveToFirst();
// <</ check if admin is avaliable
if(0 == oCurson.getCount()){
oSQL = dbh.getWritableDatabase();
ContentValues ocv = new ContentValues();
ocv.put(DbDefine.db_Info.USER_NAME_COL, "admin");
ocv.put(DbDefine.db_Info.USER_PASS_COL, "passw");
ocv.put(DbDefine.db_Info.USER_LVL_COL, 1);
oSQL.insert(DbDefine.db_Info.TABLE_NAME, null, ocv);
Log.d("DB_OPRT", "Admin Added");
oCurson.close();
}else{
Log.d("DB_OPRT", "Admin Avaliable");
oCurson.close();
}
}
// login >>
public int getUserForLogin(db_handler dbh, String u_name, String u_pass){
SQLiteDatabase oSQL = dbh.getReadableDatabase();
String[] projection= {
DbDefine.db_Info.USER_NAME_COL,
DbDefine.db_Info.USER_PASS_COL
};
String selection = "`user_name` = ? AND `user_pass` = ?";
String[] selectionArgs = {
u_name,
u_pass
};
Cursor oCurson = oSQL.query(
DbDefine.db_Info.TABLE_NAME, // table to query
projection, // rows to return
selection, // rows for where
selectionArgs, // conditions for where
null, // don't group th rows
null, // don't filter by row groups
null // don't sort
);
oCurson.moveToFirst();
int clen = oCurson.getCount();
oCurson.close();
return clen;
}
// <</ login
// puts student info in db >>
public String putStudentInfo(db_handler dbh, String user_name, String user_pass, String
user_fullName, String user_class, String user_div){
// check if admin is avaliable >>
SQLiteDatabase oSQL = dbh.getReadableDatabase();
String[] projection= {
DbDefine.db_Info.USER_NAME_COL,
DbDefine.db_Info.USER_PASS_COL
};
String selection = "`user_name` = ?";
String[] selectionArgs = {
user_name
};
Cursor oCurson = oSQL.query(
DbDefine.db_Info.TABLE_NAME, // table to query
projection, // rows to return
selection, // rows for where
selectionArgs, // conditions for where
null, // dont group th rows
null, // dont filter by row groups
null // dont sort
);
oCurson.moveToFirst();
// <</ check if admin is avaliable
if(0 == oCurson.getCount()){
oSQL = dbh.getWritableDatabase();
ContentValues ocv = new ContentValues();
ocv.put(DbDefine.db_Info.USER_NAME_COL, user_name);
ocv.put(DbDefine.db_Info.USER_PASS_COL, user_pass);
ocv.put(DbDefine.db_Info.USER_LVL_COL, "3");
ocv.put(DbDefine.db_Info.USER_FULL_NAME, user_fullName);
ocv.put(DbDefine.db_Info.USER_CLASS, user_class);
ocv.put(DbDefine.db_Info.USER_DIV, user_div);
oSQL.insert(DbDefine.db_Info.TABLE_NAME, null, ocv);
Log.d("DB_OPRT", "User Added");
oCurson.close();
return "true";
}else{
Log.d("DB_OPRT", "User Avaliable");
oCurson.close();
return "xfalse";
}
}
// <</ puts student info in db
// puts teacher info into db >>
public String putTeacherInfo(db_handler dbh, String teacherEmail, String teacherName, String
teacherPass){
// check if admin is avaliable >>
SQLiteDatabase oSQL = dbh.getReadableDatabase();
String[] projection= {
DbDefine.db_Info.USER_NAME_COL,
DbDefine.db_Info.USER_PASS_COL
};
String selection = "`user_name` = ?";
String[] selectionArgs = {
teacherEmail
};
Cursor oCurson = oSQL.query(
DbDefine.db_Info.TABLE_NAME, // table to query
projection, // rows to return
selection, // rows for where
selectionArgs, // conditions for where
null, // dont group th rows
null, // dont filter by row groups
null // dont sort
);
oCurson.moveToFirst();
// <</ check if admin is avaliable
if(0 == oCurson.getCount()){
oSQL = dbh.getWritableDatabase();
ContentValues ocv = new ContentValues();
ocv.put(DbDefine.db_Info.USER_NAME_COL, teacherEmail);
ocv.put(DbDefine.db_Info.USER_PASS_COL, teacherPass);
ocv.put(DbDefine.db_Info.USER_LVL_COL, "2");
ocv.put(DbDefine.db_Info.USER_FULL_NAME, teacherName);
oSQL.insert(DbDefine.db_Info.TABLE_NAME, null, ocv);
Log.d("DB_OPRT", "User Added");
oCurson.close();
return "true";
}else{
Log.d("DB_OPRT", "User Avaliable");
oCurson.close();
return "xfalse";
}
}
// <</ puts teacher info into db
// get all student info >>
public Cursor getStudentList(db_handler dbh){
// check if admin is avaliable >>
String lvl = "3";
SQLiteDatabase oSQL = dbh.getWritableDatabase();
String[] projection= {
DbDefine.db_Info.USER_NAME_COL,
DbDefine.db_Info.USER_PASS_COL
};
String selection = "`user_lvl` = ?";
String[] selectionArgs = {
lvl
};
Cursor oCurson = oSQL.query(
DbDefine.db_Info.TABLE_NAME, // table to query
projection, // rows to return
selection, // rows for where
selectionArgs, // conditions for where
null, // dont group th rows
null, // dont filter by row groups
null // dont sort
);
oCurson.moveToFirst();
// <</ check if admin is avaliable
return oCurson;
}
// <</ get all student info
}
package thedev.rdmuniversal.com.smartclass;
import android.provider.BaseColumns;
/**
* Created by rohitmahindrakar on 19/02/16.
*/
public class DbDefine {
public DbDefine(){}
public static abstract class db_Info implements BaseColumns{
public static final String DATABASE_NAME = "smartClassDB";
public static final String TABLE_NAME = "user_info";
public static final String USER_ID_COL = "user_id";
public static final String USER_NAME_COL = "user_name";
public static final String USER_PASS_COL = "user_pass";
public static final String USER_LVL_COL = "user_lvl";
public static final String USER_FULL_NAME = "user_full_name";
public static final String USER_CLASS = "user_class";
public static final String USER_DIV = "user_div";
}
}
public static final String USER_ID_COL = "user_id";
public static final String USER_ID_COL = "_id";
String[] projection= {
DbDefine.db_Info.USER_NAME_COL,
DbDefine.db_Info.USER_PASS_COL
};
String[] projection= {
DbDefine.db_Info.USER_ID_COL,
DbDefine.db_Info.USER_NAME_COL,
DbDefine.db_Info.USER_PASS_COL
};