java - 如何在 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);
解决方案
我假设问题是您在this.getWritableDatabase()
方法中调用方法sendPackStats()
。应该是this.getReadableDatabase()
。如果不能解决问题
- 您的查询在语法方面可能是错误的。
- 测试您
sendPackStatus()
是否返回任何值。 - 如果您正在
sendPackStatus()
异步调用您的,请确保您没有设置文本,然后才能在String packMoney
. 快乐编码!
推荐阅读
- javascript - 地图中两点之间的距离
- influxdb - InfluxDB:从零开始cumulative_sum()/对cumulative_sum和non_negative_difference所需的聚合分组
- jquery - Asp.net Mvc ajax 动作提交两次
- android - 改造 json 数据传递
- c# - textarea asp-for 不显示属性
- ios - 仅适合标签的高度
- mysql - 在一组天(在特定日期和前 2 天)获取不同的 id 计数
- wordpress - 古腾堡附加块属性
- sql - SQL UPDATE用空字符串替换括号内的所有文本
- arrays - Volley Json 解析