首页 > 解决方案 > 如何在 textView 中显示来自 SQLite 的值?

问题描述

我正在尝试从 SQLite 获取一个值,以在名为“tvPackMoney”的 textView 中显示它。

        String packMoney = Float.toString(daoHelperPacks.sendPackStats().getPackMoney());
        tvPackMoney.setText(packMoney);

在数据库中查找值的方法是这样的:

public ObjectPack sendPackStats (){

        SQLiteDatabase db = this.getWritableDatabase();

        String currentPlayer = ClassSharedPreferences.read(ClassSharedPreferences.currentPlayer, "");//read string in shared preference.
        String currentPack = ClassSharedPreferences.read(ClassSharedPreferences.currentPack, "");//read string in shared preference.

        Cursor datos = db.rawQuery("SELECT MONEY_PACK FROM "+MI_TABLA+" WHERE PLAYER_PACK ='"+currentPlayer+"' AND NAME_PACK ='"+currentPack+"' FROM "+MI_TABLA+")",null);

        ObjectPack objectPack = new ObjectPack();

        if (datos.moveToFirst()){
            objectPack.setPackMoney(datos.getFloat(0));
        }
        db.close();
        return objectPack;
    }

我使用了调试器,并在执行以下行时强制关闭:

String packMoney = Float.toString(daoHelperPacks.sendPackStats().getPackMoney());

但是直接写一个值没有问题,一切正常。

String packMoney = Float.toString((float) 1.11);

有人可以看到我做错了什么吗?提前致谢。

这里是logcat:

W/actual.pregres: Accessing hidden method Landroid/database/sqlite/SQLiteDatabase;->isMainThread()Z (greylist-max-o, linking, denied)
    Accessing hidden method Landroid/database/sqlite/SQLiteDatabase;->isMainThread()Z (greylist-max-o, linking, denied)
    Accessing hidden method Landroid/database/sqlite/SQLiteSession;->hasTransaction()Z (greylist-max-o, linking, denied)
    Accessing hidden method Landroid/content/ContentValues;->isEmpty()Z (greylist-max-o, linking, denied)
    Accessing hidden method Landroid/database/sqlite/SQLiteSession;->hasConnection()Z (greylist-max-o, linking, denied)
    Accessing hidden method Landroid/database/sqlite/SQLiteDatabase;->isInMemoryDatabase()Z (greylist-max-o, linking, denied)
    Accessing hidden field Landroid/database/sqlite/SQLiteDatabase;->mLock:Ljava/lang/Object; (greylist-max-o, linking, denied)
    Accessing hidden method Landroid/database/sqlite/SQLiteDatabaseConfiguration;->isInMemoryDb()Z (greylist-max-o, linking, denied)
    Accessing hidden field Landroid/database/sqlite/SQLiteDatabase;->mLock:Ljava/lang/Object; (greylist-max-o, linking, denied)
    Accessing hidden field Landroid/database/sqlite/SQLiteDatabase;->mLock:Ljava/lang/Object; (greylist-max-o, linking, denied)
    Accessing hidden method Landroid/database/sqlite/SQLiteDatabase;->isReadOnlyLocked()Z (greylist-max-o, linking, denied)
    Accessing hidden field Landroid/database/sqlite/SQLiteDatabase;->mLock:Ljava/lang/Object; (greylist-max-o, linking, denied)
    Accessing hidden method Landroid/database/sqlite/SQLiteDatabase;->throwIfNotOpenLocked()V (greylist-max-o, linking, denied)
W/actual.pregres: Accessing hidden method Landroid/database/sqlite/SQLiteDatabase;->dispose(Z)V (greylist-max-o, linking, denied)
    Accessing hidden method Landroid/database/sqlite/SQLiteDatabase;->onCorruption()V (greylist-max-o, linking, denied)
    Accessing hidden method Landroid/database/sqlite/SQLiteDatabase;->getLabel()Ljava/lang/String; (greylist-max-o, linking, denied)
    Accessing hidden field Landroid/database/sqlite/SQLiteDatabase;->DEBUG_ONEPLUS:Z (blacklist, linking, denied)
    Accessing hidden field Landroid/database/sqlite/SQLiteDatabase;->mCursorFactory:Landroid/database/sqlite/SQLiteDatabase$CursorFactory; (greylist-max-o, linking, denied)
    Accessing hidden field Landroid/database/sqlite/SQLiteDatabase;->mLock:Ljava/lang/Object; (greylist-max-o, linking, denied)
    Accessing hidden method Landroid/database/sqlite/SQLiteDatabase;->throwIfNotOpenLocked()V (greylist-max-o, linking, denied)
    Accessing hidden field Landroid/database/sqlite/SQLiteDatabase;->mLock:Ljava/lang/Object; (greylist-max-o, linking, denied)
    Accessing hidden method Landroid/database/sqlite/SQLiteDatabase;->throwIfNotOpenLocked()V (greylist-max-o, linking, denied)
    Accessing hidden field Landroid/database/sqlite/SQLiteDatabase;->mLock:Ljava/lang/Object; (greylist-max-o, linking, denied)
    Accessing hidden method Landroid/database/sqlite/SQLiteDatabase;->throwIfNotOpenLocked()V (greylist-max-o, linking, denied)
    Accessing hidden field Landroid/database/sqlite/SQLiteDatabase;->mLock:Ljava/lang/Object; (greylist-max-o, linking, denied)
W/actual.pregres: Accessing hidden method Landroid/database/sqlite/SQLiteDatabase;->throwIfNotOpenLocked()V (greylist-max-o, linking, denied)
    Accessing hidden method Landroid/database/sqlite/SQLiteSession;->setTransactionSuccessful()V (greylist-max-o, linking, denied)
    Accessing hidden method Landroid/content/ContentValues;->isEmpty()Z (greylist-max-o, linking, denied)
    Accessing hidden method Landroid/database/sqlite/SQLiteDatabase;->getThreadDefaultConnectionFlags(Z)I (greylist-max-o, linking, denied)
    Accessing hidden method Landroid/database/sqlite/SQLiteDatabase;->yieldIfContendedHelper(ZJ)Z (greylist-max-o, linking, denied)
I/chatty: uid=10443(com.doctoractual.pregresp) ection primary] identical 1 line
W/actual.pregres: Accessing hidden method Landroid/database/sqlite/SQLiteDatabase;->yieldIfContendedHelper(ZJ)Z (greylist-max-o, linking, denied)
D/ViewRootImpl[ManagerActivity]: windowFocusChanged hasFocus=false inTouchMode=true
W/ActivityThread: handleWindowVisibility: no activity for token android.os.BinderProxy@8b9e305
D/AndroidRuntime: Shutting down VM
E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.doctoractual.pregresp, PID: 30713
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.doctoractual.pregresp/com.doctoractual.pregresp.SuccessErrorGameActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'com.doctoractual.pregresp.ObjectPack com.doctoractual.pregresp.DAOHelperPacks.sendPackStats()' on a null object reference
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3375)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3514)
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83)
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2110)
        at android.os.Handler.dispatchMessage(Handler.java:107)
        at android.os.Looper.loop(Looper.java:214)
        at android.app.ActivityThread.main(ActivityThread.java:7697)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:516)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:950)
     Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'com.doctoractual.pregresp.ObjectPack com.doctoractual.pregresp.DAOHelperPacks.sendPackStats()' on a null object reference
        at com.doctoractual.pregresp.SuccessErrorGameActivity.onCreate(SuccessErrorGameActivity.java:48)
        at android.app.Activity.performCreate(Activity.java:7815)
        at android.app.Activity.performCreate(Activity.java:7804)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1325)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3350)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3514) 
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83) 
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) 
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2110) 
        at android.os.Handler.dispatchMessage(Handler.java:107) 
        at android.os.Looper.loop(Looper.java:214) 
        at android.app.ActivityThread.main(ActivityThread.java:7697) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:516) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:950) 
I/Process: Sending signal. PID: 30713 SIG: 9
Disconnected from the target VM, address: 'localhost:56772', transport: 'socket'

编辑: 解决方案

查询有误

错误的查询

Cursor datos = db.rawQuery("SELECT MONEY_PACK FROM "+MI_TABLA+" WHERE PLAYER_PACK ='"+currentPlayer+"' AND NAME_PACK ='"+currentPack+"' FROM "+MI_TABLA+")",null);

正确查询

Cursor datos = db.rawQuery("SELECT MONEY_PACK FROM "+MI_TABLA+" WHERE PLAYER_PACK='"+currentPlayer+"' AND NAME_PACK='"+currentPack+"'",null);

标签: javaandroidsqliteandroid-studioandroid-sqlite

解决方案


我假设问题是您在this.getWritableDatabase()方法中调用方法sendPackStats()应该是this.getReadableDatabase()。如果不能解决问题

  1. 您的查询在语法方面可能是错误的。
  2. 测试您sendPackStatus()是否返回任何值。
  3. 如果您正在sendPackStatus()异步调用您的,请确保您没有设置文本,然后才能在String packMoney. 快乐编码!

推荐阅读