android - 自定义列表光标适配器在模拟器上的 bindView 崩溃——而不是在手机上

标签 android cursor adapter listadapter

如果可以的话,我会尽量具体 - 请耐心等待,第一次提问并且对这个平台上的编程相对较新。如果之前有人问过/回答过这个问题,我深表歉意 - 请将其链接给我。我上下搜索但发现了其他不相关的(至少对我而言)问题。

真正让我感到困惑的是,我的应用程序在我的模拟器上崩溃了,但是当安装在我的手机上时(通过将 apk 上传到手机,然后使用市场上的 AppInstaller 应用程序)它可以正常工作。

崩溃来自自定义列表游标适配器的以下代码 fragment (我的代码)中编号行的 NullPointerException。

// TaskListCursorAdapter.java

@Override
public void bindView(View view, Context context, Cursor cursor) {

    super.bindView(view, context, cursor); // <<< LINE 36
    // DO OTHER BINDING OF STRINGS TO TEXT VIEWS ETC

创建了以下错误转储。

08-23 21:58:57.251: ERROR/AndroidRuntime(346): Uncaught handler: thread main exiting due to uncaught exception
08-23 21:58:57.411: ERROR/AndroidRuntime(346): java.lang.NullPointerException
08-23 21:58:57.411: ERROR/AndroidRuntime(346):     at android.widget.SimpleCursorAdapter.bindView(SimpleCursorAdapter.java:149)
08-23 21:58:57.411: ERROR/AndroidRuntime(346):     at adriaansapps.com.tasks.TaskListCursorAdapter.bindView(TaskListCursorAdapter.java:36)
08-23 21:58:57.411: ERROR/AndroidRuntime(346):     at adriaansapps.com.tasks.TaskListCursorAdapter.newView(TaskListCursorAdapter.java:83)
08-23 21:58:57.411: ERROR/AndroidRuntime(346):     at android.widget.CursorAdapter.getView(CursorAdapter.java:182)
08-23 21:58:57.411: ERROR/AndroidRuntime(346):     at android.widget.AbsListView.obtainView(AbsListView.java:1274)
08-23 21:58:57.411: ERROR/AndroidRuntime(346):     at android.widget.ListView.measureHeightOfChildren(ListView.java:1147)
08-23 21:58:57.411: ERROR/AndroidRuntime(346):     at android.widget.ListView.onMeasure(ListView.java:1060)
08-23 21:58:57.411: ERROR/AndroidRuntime(346):     at android.view.View.measure(View.java:7964)
08-23 21:58:57.411: ERROR/AndroidRuntime(346):     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3023)
08-23 21:58:57.411: ERROR/AndroidRuntime(346):     at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:888)
08-23 21:58:57.411: ERROR/AndroidRuntime(346):     at android.widget.LinearLayout.measureHorizontal(LinearLayout.java:619)
08-23 21:58:57.411: ERROR/AndroidRuntime(346):     at android.widget.LinearLayout.onMeasure(LinearLayout.java:280)
08-23 21:58:57.411: ERROR/AndroidRuntime(346):     at android.view.View.measure(View.java:7964)
08-23 21:58:57.411: ERROR/AndroidRuntime(346):     at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:569)
08-23 21:58:57.411: ERROR/AndroidRuntime(346):     at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:361)
08-23 21:58:57.411: ERROR/AndroidRuntime(346):     at android.view.View.measure(View.java:7964)
08-23 21:58:57.411: ERROR/AndroidRuntime(346):     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3023)
08-23 21:58:57.411: ERROR/AndroidRuntime(346):     at android.widget.FrameLayout.onMeasure(FrameLayout.java:245)
08-23 21:58:57.411: ERROR/AndroidRuntime(346):     at android.view.View.measure(View.java:7964)
08-23 21:58:57.411: ERROR/AndroidRuntime(346):     at android.widget.LinearLayout.measureVertical(LinearLayout.java:464)
08-23 21:58:57.411: ERROR/AndroidRuntime(346):     at android.widget.LinearLayout.onMeasure(LinearLayout.java:278)
08-23 21:58:57.411: ERROR/AndroidRuntime(346):     at android.view.View.measure(View.java:7964)
08-23 21:58:57.411: ERROR/AndroidRuntime(346):     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3023)
08-23 21:58:57.411: ERROR/AndroidRuntime(346):     at android.widget.FrameLayout.onMeasure(FrameLayout.java:245)
08-23 21:58:57.411: ERROR/AndroidRuntime(346):     at android.view.View.measure(View.java:7964)
08-23 21:58:57.411: ERROR/AndroidRuntime(346):     at android.view.ViewRoot.performTraversals(ViewRoot.java:763)
08-23 21:58:57.411: ERROR/AndroidRuntime(346):     at android.view.ViewRoot.handleMessage(ViewRoot.java:1633)
08-23 21:58:57.411: ERROR/AndroidRuntime(346):     at android.os.Handler.dispatchMessage(Handler.java:99)
08-23 21:58:57.411: ERROR/AndroidRuntime(346):     at android.os.Looper.loop(Looper.java:123)
08-23 21:58:57.411: ERROR/AndroidRuntime(346):     at android.app.ActivityThread.main(ActivityThread.java:4363)
08-23 21:58:57.411: ERROR/AndroidRuntime(346):     at java.lang.reflect.Method.invokeNative(Native Method)
08-23 21:58:57.411: ERROR/AndroidRuntime(346):     at java.lang.reflect.Method.invoke(Method.java:521)
08-23 21:58:57.411: ERROR/AndroidRuntime(346):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
08-23 21:58:57.411: ERROR/AndroidRuntime(346):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
08-23 21:58:57.411: ERROR/AndroidRuntime(346):     at dalvik.system.NativeStart.main(Native Method)

奇怪的是,我一整天都在愉快地编程和调试,突然间我的应用程序的一个长时间工作且没有错误的部分现在抛出了这个错误。

我怀疑这可能是数据库的问题,但真的不确定 - 那里似乎没有什么不妥。直到今天我有一个只有一个表的数据库 - 今天我添加了一个新表,它也有一个“_id”字段作为名称自动增量键字段,我在文档中读到它是 android 列表适配器所必需的(如果内存可用) .在编码方面有一些经验,在数据库方面有一些次要经验,这对我来说似乎是个坏主意,但我不确定这是否是问题所在和/或如何解决。

我在此处列出的崩溃不显示或引用其他新表中的数据。游标不包含来自它的任何查询数据。事实上,如果我将新表的关键字段“_id”重命名为其他名称(即“_blah”),崩溃仍然存在。

就像我说的,如果我将 apk 上传到我的手机,它就可以工作。

我在模拟器上试过以下方法: - 重新启动 adb(和 eclipse) - 没有结果 - 从模拟器卸载 - 没有结果 - 销毁 AVD 配置文件并重新创建 - 无结果

我在 Android 2.1 SDK 下开发这个,过去几周一直如此。我只安装过那个 SDK,我还没有更新到 2.2。

不知道我还能在这里说什么 - 希望这里的人有足够的经验来阐明它。

如果不对此进行修复,我可以预见这里的开发过程会非常缓慢(假设我必须上传到我的手机以测试新的代码更改...)。

抱歉啰嗦了 - 希望我能提供足够的信息让你们这些更聪明的人解决这个问题。谢谢

最佳答案

我认为您不应该直接从源代码中调用 .bindView()。看起来你是这样做的,看看你的错误转储:

08-23 21:58:57.411: ERROR/AndroidRuntime(346):     at adriaansapps.com.tasks.TaskListCursorAdapter.bindView(TaskListCursorAdapter.java:36)
08-23 21:58:57.411: ERROR/AndroidRuntime(346):     at adriaansapps.com.tasks.TaskListCursorAdapter.newView(TaskListCursorAdapter.java:83)

只需使用 ListView.setAdapter(...) 设置 ListView/GridView 的适配器,让奇迹发生。

关于android - 自定义列表光标适配器在模拟器上的 bindView 崩溃——而不是在手机上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3547439/

相关文章:

android - 在 recyclerView 的行内处理按钮单击

android - Logcat 将数据库条目显示为空值

android - 在 Play 商店中按国家制作不同的应用

android - Google+ API 应用准备就绪

android - 流式传输音频文件并缓存它

python - ndb 中的游标如何工作?

android - 关闭游标上的 IllegalStateException

c - C 中文件光标移动两行

java - 没有连接适配器;跳过布局 onCreateView()

android - 回收具有不同行布局的 ListView 行