我正在尝试从数据库中获取数据并将其放在 android 中的 ListView 中

I am trying to fetch data from database and place it in a ListView in android

我想创建一个包含 1 个问题和 4 个选项的测验应用程序,为此我创建了一个数据库,使用 ListView 从中将问题和选项提取到 5 个文本视图。我浏览了很多教程并使用 Whosebug 中的一个页面使用 ArrayListCursor 创建了它,但我得到了 错误。

java.lang.NullPointerException: Attempt to invoke virtual method 'android.database.Cursor android.database.sqlite.SQLiteDatabase.query(java.lang.String, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String, java.lang.String, java.lang.String)' on a null object reference
            at com.example.shark.shopapp.merge.getData(merge.java:26)
            at com.example.shark.shopapp.MainActivity.onCreate(MainActivity.java:68)

它显示在 Cursor.query() 行中。主要活动:

setContentView(R.layout.ques_layout);  db=openOrCreateDatabase("check1.db",SQLiteDatabase.CREATE_IF_NECESSARY,null);
db.execSQL("CREATE TABLE que(ques TEXT,optn1 TEXT,optn2 TEXT,optn3 TEXT,optn4 TEXT)");
ListView l1=(ListView)findViewById(R.id.listView2);
merge mer=new merge(this);
ArrayList<String> data=mer.getData();
l1.setAdapter(new ArrayAdapter<String>(this,R.layout.ques_layout,data));
db.close();

Merge.java:

public merge(Context c){ourContext=c;}
    public ArrayList<String> getData() {
        String[] columns = new String[]{ques, optn1, optn2, optn3, optn4};
        Cursor c2=db.query(DATABASE_TABLE,columns,null,null,null,null,null);
        ArrayList<String> result = new ArrayList<String>();
        int ques = c2.getColumnIndex("_id");
        int optn1 = c2.getColumnIndex("optn1");
        int optn2 = c2.getColumnIndex("optn2");
        int optn3 = c2.getColumnIndex("optn3");
        int optn4 = c2.getColumnIndex("optn4");
        for (c2.moveToFirst(); !c2.isAfterLast(); c2.moveToNext()) {
            result.add(c2.getString(ques) + c2.getString(optn1) + c2.getString(optn2) + c2.getString(optn3) + c2.getString(optn4));
        }
        db.close();
        return result;
        }
    }

试试这个:
String strQuery="select option from (select option1 as option from table
联合所有
select option2 作为来自 table
的选项 联合所有
select option3 作为来自 table
的选项 联合所有
select option4 作为来自 table) 的选项作为结果";
游标 c2 = db.SelectQuery(strQuery);
String[] from ={"option"};//想加多少就加多少。
in[] to to = {"R.id.TextViewID"};//你可以根据需要添加任意多个。
SimpleCursorAdapter sca = new SimpleCursorAdapter(youractivityname.this,R.layout.listviewlayout,c2,from,to); yourlistview.setAdapter(sca);

你可以这样做。

_cursor = _database.rawQuery("select * from "+YOUR_TABLE_NAME, null);

                _cursor.moveToFirst(); 
                while(_cursor.isAfterLast() == false){

                    _idDB =  _cursor.getInt(_cursor.getColumnIndex(MySqliteHelper.READING_DETAILS_COLUMN_ID));
                    _ivrsDB =  _cursor.getString(_cursor.getColumnIndex(MySqliteHelper.READING_DETAILS_COLUMN_IVRS_NUM));
                    _readingDB = _cursor.getString(_cursor.getColumnIndex(MySqliteHelper.READING_DETAILS_COLUMN_METER_READING)); 
                    _imageDB = _cursor.getString(_cursor.getColumnIndex(MySqliteHelper.READING_DETAILS_COLUMN_IMAGE));
                    _userIdDB = _cursor.getString(_cursor.getColumnIndex(MySqliteHelper.READING_DETAILS_COLUMN_USER_ID));
                    _latDB = _cursor.getString(_cursor.getColumnIndex(MySqliteHelper.READING_DETAILS_COLUMN_LAT));
                    _longDB = _cursor.getString(_cursor.getColumnIndex(MySqliteHelper.READING_DETAILS_COLUMN_LONG));
                    _dateDB = _cursor.getString(_cursor.getColumnIndex(MySqliteHelper.READING_DETAILS_COLUMN_DATE_TIME));
                    _mob1DB = _cursor.getString(_cursor.getColumnIndex(MySqliteHelper.READING_DETAILS_COLUMN_MOB_FIRST));
                    _mob2DB = _cursor.getString(_cursor.getColumnIndex(MySqliteHelper.READING_DETAILS_COLUMN_MOB_SECOND));
                    _reasonSelected  = _cursor.getString(_cursor.getColumnIndex(MySqliteHelper.READING_DETAILS_COLUMN_REASON));

                    //need to call UPDATE WS
                    updateDataFromDB(context, _idDB , _ivrsDB , _readingDB, _imageDB, _userIdDB , _latDB , _longDB, _dateDB , _mob1DB , _mob2DB
                            ,_reasonSelected);


                    System.out.println("Id from DB=" + _idDB);
                    System.out.println("IVRS NUMBER="+ _ivrsDB);
                    System.out.println("Reading="+ _readingDB);
                    //System.out.println("Image Path="+_cursor.getString(_cursor.getColumnIndex(MySqliteHelper.READING_DETAILS_COLUMN_IMAGE)));
                    System.out.println("USer ID="+_userIdDB);
                    System.out.println("LAT="+_latDB);
                    System.out.println("LONG="+_longDB);
                    System.out.println("DATE="+ _dateDB);
                    System.out.println("MOb 1="+_mob1DB);
                    System.out.println("Mob 2="+_mob2DB);
                    System.out.println("Reason from db =" + _reasonSelected);




                    _cursor.moveToNext();
                }
                _cursor.close();

您的 db 变量未在 merge 中初始化。

假设您使用的是 SQLiteOpenHelper,例如getWritableDatabase() 在辅助对象上获取一个 SQLiteDatabase 对象,您可以将其分配给 db.