错误:尝试在空对象引用'android.database.Cursor com.myapplication.DatabaseHeleper.getData()'上调用虚拟方法

问题描述 投票:0回答:1

This the error

我在执行下面提到的代码后附加了上面的错误,下面给出的代码不是完整的代码,但它针对的是我的问题所在的主要代码。从sqlite数据库。所以下面的代码表明我试图从dbhelper.java类中获取并存储在sendsms.java类中的num中,但是我认为它不是在获取中,因此,我将要求您查看代码并指导我在哪里进行了改进。我希望现在的问题很清楚,并且给出足够的描述,所以请帮忙。

sendsms.java


   try {

            Cursor cursor = databaseHelper.getdata();
            while (cursor.moveToNext())

            {

                String num = cursor.getString(0);
                String numm = cursor.getString(1);
                String nummm = cursor.getString(2);

            }

       }
        catch(Exception e){
            Toast.makeText(getBaseContext(), e.getMessage(),
                    Toast.LENGTH_SHORT).show();
        }

            public void run() {

                sms.sendTextMessage(num, null, "Help! I've met with an accident at http://maps.google.com/?q=" + String.valueOf(latitude) + "" +
                        "," + String.valueOf(longitude), null, null);

dbhelper.java


    public static final String TABLE_REGISTER = "signin";
    public static final String COL_ID = "USER_ID";
    public static final String COL_NAME = "NAME";
    public static final String COL_PHONE = "PHONE_NUMBER";
    public static final String COL_EMAIL = "EMAIL";
    public static final String COL_PASSWORD = "PASSWORD";
    public static final String COL_CONFIRM_PASSWORD = "CONFIRM_PASSWORD";

    public static final String COL_NAMEone_CON = "NAMEONE";
    public static final String COL_NUMBERone_CON = "NUMBERONE";
    public static final String COL_NAMEtwo_CON = "NAMETWO";
    public static final String COL_NUMBERtwo_CON = "NUMBERTWO";
    public static final String COL_NAMEthree_CON = "NAMETHREE";
    public static final String COL_NUMBERthree_CON = "NUMBERTHREE";

    public SQLiteDatabase db;

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("CREATE TABLE " + TABLE_REGISTER + "(" + COL_ID + " INTEGER PRIMARY KEY AUTOINCREMENT , "
                + COL_NAME + " TEXT , " + COL_PHONE + "  LONG  UNIQUE  ," + COL_EMAIL + " VARCHAR UNIQUE," + COL_PASSWORD + " VARCHAR , "
                + COL_CONFIRM_PASSWORD + " VARCHAR ," + COL_NAMEone_CON + " TEXT , "
                + COL_NUMBERone_CON + "  LONG  UNIQUE ," + COL_NAMEtwo_CON + " TEXT ," + COL_NUMBERtwo_CON + "  LONG  UNIQUE , "
                + COL_NAMEthree_CON + " TEXT ," + COL_NUMBERthree_CON + " LONG  UNIQUE " + ")");

    }

    public Cursor getdata(){
        SQLiteDatabase db = this.getWritableDatabase();

        Cursor cursor = db.rawQuery("select NUMBERONE, NUMBERTWO,NUMBERTHREE  from signin ", null);

        return cursor;
    }

java android database sqlite android-studio-3.0
1个回答
0
投票
请按以下方式更改您的代码:-

try { Cursor cursor = databaseHelper.getdata(); if (cursor != null && cursor.getCount() > 0) { while (cursor.moveToNext()) { String num = cursor.getString(0); String numm = cursor.getString(1); String nummm = cursor.getString(2); } } } catch(Exception e){ Toast.makeText(getBaseContext(), e.getMessage(), Toast.LENGTH_SHORT).show(); }


0
投票
似乎您需要数据之前必须先调用getReadableDatabase或getWritableDatabase,这是因为创建数据库需要时间。因此,您必须意识到这一点。

此外,我想指出,在sendms.java上执行cursor.moveToFirst()之前必须先[C0

© www.soinside.com 2019 - 2024. All rights reserved.