如何从Android中的数据库中获取数据?通过光标 c= db.query?

Posted

技术标签:

【中文标题】如何从Android中的数据库中获取数据?通过光标 c= db.query?【英文标题】:How to get data from database in Android ? by Cursor c= db.query? 【发布时间】:2011-09-04 21:12:04 【问题描述】:

这是 myDB 类 //请看一下 public Cursor getplaces() --- 我是对还是错? 如果我想 setListAdapter,如何在主 Activity 类中编码。感谢您的帮助。

公共类 MyDB 受保护的静态最终字符串 TAG = "TAG"; 私有最终上下文 mContext; 私有 SQLiteDatabase mDb; 私人 MyDBhelper mDbHelper; 公共MyDB(上下文上下文) this.mContext = 上下文; mDbHelper = new MyDBhelper(mContext); 公共 MyDB createDatabase() 抛出 SQLException 尝试 mDbHelper.createDataBase(); 捕捉(IOException mIOException) Log.e(TAG, mIOException.toString() + "UnableToCreateDatabase"); 抛出新错误(“UnableToCreateDatabase”); 返回这个; 公共 MyDB open() 抛出 SQLException 尝试 mDbHelper.openDataBase(); mDbHelper.close(); mDb = mDbHelper.getReadableDatabase(); 捕获(SQLException mSQLException) Log.e(TAG, mSQLException.toString()); 抛出 mSQLException; 返回这个; 公共游标 getplaces() 光标 c = mDb.query(Constants.DATABASE_NAME, null, null, null, null, null, null); 返回 c; 公共无效关闭() mDbHelper.close();

ListplaceActivity 类

公共 ListplaceActivity 扩展 ListActivity 私有静态 MyDB mDbHelper; String[] from = new String[] 常量.TITLE_NAME ; int[] to = new int[] R.id.place_title; @覆盖 公共无效 onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); mDbHelper = new MyDB(this); 光标 c = mDbHelper.getplaces(); setListAdapter(新的 SimpleCursorAdapter(这个, R.layout.list_place, c, 从到)); 最终列表视图 lv = getListView(); lv.setOnItemClickListener(new OnItemClickListener() public void onItemClick(AdapterView parent, View view,int position, long id) 意图 newActivity = new Intent(view.getContext(), Place.class); 开始活动(新活动); );

在我点击进入 ListplacesActivity 页面后,在 LogCat 中显示如下“意外停止”并且没有显示任何列表:

05-30 21:49:21.543:信息/进程(17605):发送信号。 PID:17605 SIG:9 05-30 21:49:21.583: INFO/ActivityManager(59): 进程 com.ctg (pid 17605) 已经死亡。 05-30 21:49:21.593: INFO/WindowManager(59): WIN DEATH: Window44de90a0 com.ctg/com.ctg.CTG paused=false 05-30 21:49:21.674:INFO/ActivityManager(59):为活动 com.ctg/.CTG 启动 proc com.ctg:pid=27207 uid=10028 gids= 05-30 21:49:21.733: 错误/gralloc(59): [注销] 句柄 0x5fe9d8 仍被锁定(状态 = 40000001) 05-30 21:49:22.103: DEBUG/ddm-heap(27207): 得到功能列表请求 05-30 21:49:22.265:INFO/UsageStats(59):com.ctg 意外恢复,而 com.ctg 已经恢复 05-30 21:49:23.084:调试/dalvikvm(27207):GC 在 216 毫秒内释放了 801 个对象/58520 个字节 05-30 21:49:23.433:调试/dalvikvm(27207):GC 在 129 毫秒内释放了 93 个对象/3632 个字节 05-30 21:49:23.623: WARN/PhoneWindow(27207): 以前聚焦的视图在保存过程中报告了 id 16908298,但在恢复过程中找不到。 05-30 21:49:23.843: WARN/InputManagerService(59): 收到 RemoteException 向 pid 17605 uid 10028 发送 setActive(false) 通知 05-30 21:49:24.103:INFO/ActivityManager(59):显示的活动 com.ctg/.CTG:2489 毫秒(总共 33589 毫秒) 05-30 21:49:29.013: INFO/ActivityManager(59): 开始活动: Intent cmp=com.ctg/.AttractionsListActivity 05-30 21:49:29.085:调试/androidRuntime(27207):关闭 VM 05-30 21:49:29.085: WARN/dalvikvm(27207): threadid=3: 线程以未捕获的异常退出 (group=0x4001b188) 05-30 21:49:29.094:错误/AndroidRuntime(27207):未捕获的处理程序:线程主因未捕获的异常而退出 05-30 21:49:29.114: 错误/AndroidRuntime(27207): java.lang.RuntimeException: 无法启动活动 ComponentInfocom.ctg/com.ctg.AttractionsListActivity: java.lang.NullPointerException 05-30 21:49:29.114: 错误/AndroidRuntime(27207): 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2496) 05-30 21:49:29.114: 错误/AndroidRuntime(27207): 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2512) 05-30 21:49:29.114: 错误/AndroidRuntime(27207): 在 android.app.ActivityThread.access$2200(ActivityThread.java:119) 05-30 21:49:29.114: 错误/AndroidRuntime(27207): 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1863) 05-30 21:49:29.114: 错误/AndroidRuntime(27207): 在 android.os.Handler.dispatchMessage(Handler.java:99) 05-30 21:49:29.114: 错误/AndroidRuntime(27207): 在 android.os.Looper.loop(Looper.java:123) 05-30 21:49:29.114: 错误/AndroidRuntime(27207): 在 android.app.ActivityThread.main(ActivityThread.java:4363) 05-30 21:49:29.114: 错误/AndroidRuntime(27207): 在 java.lang.reflect.Method.invokeNative(Native Method) 05-30 21:49:29.114: 错误/AndroidRuntime(27207): 在 java.lang.reflect.Method.invoke(Method.java:521) 05-30 21:49:29.114: 错误/AndroidRuntime(27207): 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860) 05-30 21:49:29.114: 错误/AndroidRuntime(27207): 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 05-30 21:49:29.114:错误/AndroidRuntime(27207):在 dalvik.system.NativeStart.main(本机方法) 05-30 21:49:29.114: 错误/AndroidRuntime(27207): 由: java.lang.NullPointerException 引起 05-30 21:49:29.114: 错误/AndroidRuntime(27207): 在 com.ctg.data.MyDB.getplaces(MyDB.java:82) 05-30 21:49:29.114: 错误/AndroidRuntime(27207): 在 com.ctg.AttractionsListActivity.onCreate(AttractionsListActivity.java:32) 05-30 21:49:29.114: 错误/AndroidRuntime(27207): 在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 05-30 21:49:29.114: 错误/AndroidRuntime(27207): 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2459) 05-30 21:49:29.114: 错误/AndroidRuntime(27207): ... 11 更多 05-30 21:49:29.144:INFO/Process(59):发送信号。 PID:27207 SIG:3 05-30 21:49:29.144: INFO/dalvikvm(27207): threadid=7: 对信号 3 做出反应 05-30 21:49:29.174: INFO/dalvikvm(27207): 将堆栈跟踪写入“/data/anr/traces.txt” 05-30 21:49:39.039:WARN/ActivityManager(59):启动超时已过期,放弃唤醒锁! 05-30 21:49:39.057: WARN/ActivityManager(59): HistoryRecord44eae320 com.ctg/.AttractionsListActivity 的活动空闲超时

【问题讨论】:

你有什么问题?您希望看到什么(我猜是带有地方 XD 的列表)?你看到了什么呢?如果崩溃,请粘贴 logcat 输出。 我不知道它为什么会崩溃..请帮助我 它因为 NullPointerException 而崩溃......如果你按照 dmon 所说的去做,它将解决你的问题 ^_^ 【参考方案1】:

你没有调用MDbHelper.open(),所以getPlaces()里面的变量mDb是空的。

【讨论】:

能否请您在我的代码中修复它。我对开发非常陌生。 就像我说的,在你的onCreate 中添加mDbHelper.open() 之前调用mDbHelper.getPlaces() 现在您可能会遇到错误,因为您没有选择任何列(您在所有其他参数上都传递了 null)。尝试先阅读更多关于 Android+SQLite 的内容,例如 this link。 哦,天哪,我爱你,太爱你了!!!!你知道我一整天都在这里打什么。非常感谢...最后,我在这一行找到了它 Cursor c = mDb.query(Constants.DATABASE_NAME, null, null, null, null, null, null); >>> 更改为光标 c = mDb.query(Constants.TABLE_NAME_PLACE, null, null, null, null, null, null);

以上是关于如何从Android中的数据库中获取数据?通过光标 c= db.query?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用游标从sqlite android中的多个列中获取数据

如何从android中的sqlite中检索数据

如何从 Sqlite ( android ) 中的 datetime 字段获取日期

如何使用Flask,SQLAlchemy或psycopg2从Postgres中的光标获取数据

从 Android 中的 URI 检索联系人电话号码

Android 内容提供程序。如何通过通讯录中的一个请求获取所有数据