从SQLite数据库检索值 Android

8 浏览
0 Comments

从SQLite数据库检索值 Android

非常感谢迄今为止的所有帮助。我已经成功创建了我的数据库,并使用sqlite浏览器查看了它。我想分别检索每一列中的值。这是我DBHelper类中的代码:\n

public TingTingUser getCurrentUser(int id){
    SQLiteDatabase currDB = databaseManager.getWritableDatabase();
    Cursor cursor = currDB.query(true, TABLE_NAME, new String[]{COL_ID, COL_USER_ID, COL_FULL_NAME, COL_GENDER, COL_DOB, COL_MOBILE_NUM, COL_OCCUPATION, COL_ORGANIZATION}, COL_ID + "=?", new String[]{String.valueOf(id)}, null, null, null, null);
    if (cursor != null && cursor.moveToFirst()){
        TingTingUser user = new TingTingUser(Integer.parseInt(cursor.getString(0)), cursor.getString(1), cursor.getString(2), cursor.getString(3), cursor.getString(4), cursor.getString(5), cursor.getString(6), cursor.getString(7));
        return user;
    }
    return null;
}

\n在log-cat中,值是正确的,但在我的活动中,它抛出了异常。这是我检索各个值的代码:\n我的DatabaseUtils类:\n

public class DatabaseUtils extends AppCompatActivity {
private static final String TAG = DatabaseUtils.class.getSimpleName();
protected static DBHelper helper;
public static Context context;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    helper = new DBHelper(this);
    context = this;
}
public static String getUserPhoneNumber(){
    TingTingUser user = helper.getCurrentUser(1);
    String number = user.getMobileNumber();
    Log.d(TAG, "Phone Number from DB is:\t" + number);
    if (number == null){
        return null;
    }
    return number;
}
public static String getUserNameFromDB(){
    TingTingUser user = helper.getCurrentUser(1);
    String name = user.getDisplayName();
    if (name == null){
        return null;
    }
    return name;
}
public static boolean saveGalleryImageToDB(Uri uri){
    helper.open();
    InputStream inputStream = null;
    try {
        inputStream = context.getContentResolver().openInputStream(uri);
        byte[] inputData = AppUtils.ImageUtils.getBytes(inputStream);
        helper.saveGalleryImage(inputData);
        helper.close();
        return true;
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
    finally {
        helper.close();
    }
    return false;
}
public static boolean loadImage(Context context, ImageView imageView){
    try{
        helper.open();
        byte[] bytes = helper.getImage();
        helper.close();
        Bitmap bitmap = AppUtils.ImageUtils.getImage(bytes);
        Uri uri = AppUtils.ImageUtils.getImageUri(context, bitmap);
        imageView.setImageBitmap(AppUtils.ImageUtils.getImage(bytes));
        return true;
    } catch (Exception ex){
        ex.printStackTrace();
    }
    return false;
}
}

\n在活动中检索电话号码的示例代码:\n

String phone = DatabaseUtils.getUserPhoneNumber();
Log.d(TAG, "Phone Number form DB is:\t" + phone);

\nTingTingUser是我的用户模型类,在DatabaseUtils类中展示了基本信息。\n

\nlogcat中的异常信息:\nCaused by: java.lang.NullPointerException: Attempt to invoke virtual method \'com.billionusers.tingting.model.TingTingUser com.billionusers.tingting.db.DBHelper.getCurrentUser(int)\' on a null object reference\n at com.billionusers.tingting.db.DatabaseUtils.getUserPhoneNumber(DatabaseUtils.java:39)\n at com.billionusers.tingting.activities.EditProfileActivity.onCreate(EditProfileActivity.java:89)\n at android.app.Activity.performCreate(Activity.java:5990)\n at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106)\n at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2278)\n at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387) \n at android.app.ActivityThread.access$800(ActivityThread.java:151) \n at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303) \n at android.os.Handler.dispatchMessage(Handler.java:102) \n at android.os.Looper.loop(Looper.java:135) \n at android.app.ActivityThread.main(ActivityThread.java:5254) \n at java.lang.reflect.Method.invoke(Native Method) \n at java.lang.reflect.Method.invoke(Method.java:372) \n at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) \n at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) \n

\n怎么解决这个错误呢?\n谢谢。\n这是我的表快照:\n\"enter\n我想分别获取列值。请看一下并指导我。再次感谢大家。

0
0 Comments

原因:在数据库对象的初始化中出现了问题。当数据库对象没有正确初始化时,会导致空指针异常。

解决方法:检查数据库对象的初始化。

示例代码:

// 创建数据库对象
DatabaseHelper dbHelper = new DatabaseHelper(context);
SQLiteDatabase db = dbHelper.getReadableDatabase();
// 检查数据库对象是否为空
if (db != null) {
    // 执行查询操作等
} else {
    // 处理数据库对象为空的情况
}

问题原因和解决方法中的代码示例告诉我们,在使用SQLite数据库时,如果没有正确初始化数据库对象,就会出现空指针异常。为了避免这个问题,我们需要在使用数据库之前,确保数据库对象已经正确初始化。

0
0 Comments

问题的原因是没有初始化dbHelper。在getUserPhoneNumber()方法中进行初始化即可解决这个问题。

0