Java SimpleCrsorAdaptor使我的android应用程序意外退出

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

因此,在这个列表视图中,我想显示数据库中所有注册学生的全名和电子邮件。我成功地获取了光标和所有数据,但一旦我将其绑定到SimpleCrsorAdaptor,我的应用程序就崩溃了。。 请帮忙。。。。。。 下面是Java和各自的XML资源代码

Java代码:

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
    };