Android 2.3.3
Eclipse Version: 3.7.0
LogCat
LogCat 报错信息:
03-13 10:25:37.163: ERROR/AndroidRuntime(4166): java.lang.IllegalArgumentException: the bind value at index 2 is null
03-13 10:25:37.163: ERROR/AndroidRuntime(4166): at android.database.sqlite.SQLiteProgram.bindString(SQLiteProgram.java:237)
03-13 10:25:37.163: ERROR/AndroidRuntime(4166): at android.database.sqlite.SQLiteQuery.bindString(SQLiteQuery.java:185)
03-13 10:25:37.163: ERROR/AndroidRuntime(4166): at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:48)
03-13 10:25:37.163: ERROR/AndroidRuntime(4166): at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1356)
03-13 10:25:37.163: ERROR/AndroidRuntime(4166): at android.database.sqlite.SQLiteDatabase.queryWithFactory(SQLiteDatabase.java:1235)
03-13 10:25:37.163: ERROR/AndroidRuntime(4166): at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1189)
03-13 10:25:37.163: ERROR/AndroidRuntime(4166): at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1271)
03-13 10:25:37.163: ERROR/AndroidRuntime(4166): at com.tmall.nokia.db.RecordDBHelper.query(RecordDBHelper.java:53)
03-13 10:25:37.163: ERROR/AndroidRuntime(4166): at com.tmall.nokia.manage.RecordDBopt.get(RecordDBopt.java:80)
03-13 10:25:37.163: ERROR/AndroidRuntime(4166): at com.tmall.nokia.Play.savePlayCount(Play.java:775)
03-13 10:25:37.163: ERROR/AndroidRuntime(4166): at com.tmall.nokia.Play$5.run(Play.java:369)
03-13 10:25:37.163: ERROR/AndroidRuntime(4166): at java.util.Timer$TimerImpl.run(Timer.java:284)
发生错误原因分析:
检查相关代码,发现
传入savePlayCount的String值programid为null,在传入之前和传入后均未作判断
public void savePlayCount(String programid, int count) {
……
}
而programid最终作为参数args这个String数组中的一个值,用于数据库查询
Cursor cur = db.query(TBL_NAME, null, where, args, null, null, order);
由于args这个String数组中的String有null值,报错
解决办法:
在传入programid前或之后对其值作判断
if (programid != null) {
……
}
PS:args这个String数组中不能有null值
分享到:
相关推荐
在Android开发中,SQLite是一个非常重要的组成部分,它是一个轻量级的、开源的、嵌入式的SQL数据库引擎,被广泛用于存储和管理应用程序中的结构化数据。本篇将深入探讨如何在Android应用中使用SQLite,包括数据库的...
在IT领域,SQLite是一款轻量级的嵌入式数据库,广泛应用于移动设备和单机应用程序中,因为它无需服务器进程,可以方便地进行数据存储。本文将深入探讨如何在SQLite数据库中插入对象,以及如何从数据库中取出这些对象...
为了实现这一功能,你需要在ContentProvider的onCreate()方法中注册一个ContentObserver,并在query()方法中设置通知URI。 4. **使用LoaderManager** LoaderManager是负责管理Loader实例的组件,它会根据Activity...
在Android开发中,SQLite是一个非常重要的组成部分,它是一个轻量级的数据库系统,允许开发者在移动设备上存储和管理数据。本示例将详细介绍如何在Android应用中使用SQLite进行数据库操作,通过`ex08_1_SQLite`这个...
这里需要注意的是,`onCreate`方法中创建了两个表:`jftt_user`和`jftt_info`,分别存储用户的基本信息和用户的附加信息。这些表的设计可以根据实际需求进行调整。 ##### 2. 实现BaseAdapter BaseAdapter是...
Cursor cursor = database.query("MyTable", columns, null, null, null, null, null); while (cursor.moveToNext()) { int id = cursor.getInt(cursor.getColumnIndex("id")); String name = cursor.getString...
在Android应用开发中,SQLite数据库是用于存储应用数据的一个重要组件。SQLite是一个轻量级的、嵌入式的关系型数据库,特别适合于移动设备,因为它不需要独立的服务进程,且占用资源少。以下将详细介绍Android中...
在上述例子中,如果将DATABASE_VERSION的值改为2,那么在应用启动时,会执行onUpgrade()方法,对数据库进行相应的更新。 创建表后,我们可以进行数据的增删改查操作。添加数据通常使用SQL的INSERT语句,例如: ```...
总之,Android中的SQLite数据库提供了一种有效的方式,用于在本地存储应用程序所需的数据。通过创建一个像DBAdapter这样的辅助类,可以简化数据库操作,并使代码更加整洁和易于维护。了解这些基础知识后,你就可以...
在Android开发中,SQLite数据库是应用内存储数据的常用方式,尤其适合小规模的数据存储。本文将深入探讨如何使用`SqliteDatabase`进行数据库操作,并结合`Menu`来实现查询、新增、修改和删除功能。 首先,`...
在Android应用开发中,SQLite是一个轻量级的数据库系统,用于存储和管理应用程序的数据。SQLite数据库的优势在于它不需要单独的服务进程,而是直接嵌入到应用程序中,因此在资源有限的移动设备上非常适用。本教程将...
这里我们将深入探讨安卓系统中的SQLite数据库,它是Android内置的关系型数据库,广泛用于移动应用的数据管理。 首先,我们需要了解SQLite的基本概念。SQLite是一个轻量级的数据库引擎,不需要单独的服务器进程,...
使用`query()`方法可以获取表中的数据。例如,查询所有记录: ```java public List<String> getAllData() { List<String> dataList = new ArrayList(); SQLiteDatabase db = this.getReadableDatabase(); ...
总的来说,SQLite结合Java JDBC驱动提供了一种简单而有效的在Java应用程序中管理数据的方法。通过学习和掌握这些基本概念,你可以创建功能丰富的数据库驱动的应用程序,无论是小型项目还是大型系统的一部分。记得...
Cursor cursor = resolver.query(uri, null, null, null, null); ``` 6. **使用CursorLoader(可选)**: 如果你想在后台线程中加载数据,可以使用CursorLoader和LoaderManager。在Activity或Fragment中启动Loader,...
Cursor cursor = resolver.query(calendarUri, null, null, null, null); // 查询并处理日历数据 ``` 此外,你可能还需要处理时间区、日期格式等细节问题。在国际化的应用中,确保正确处理日期和时间显示至关重要。...
定义一个ContentProvider需要继承ContentProvider类,并重写其关键方法,如query()、insert()、update()和delete(),以便处理数据的读写操作。同时,需要在AndroidManifest.xml中注册Content Provider。 然后,使用...
游标(Cursor)是数据库操作中的一个重要概念,特别是在Android开发中,它被广泛用于从SQLite数据库检索数据。在"Cursor-Demo"项目中,我们将会深入理解如何利用游标进行数据迭代,以便有效地处理和展示从...