【问题标题】:Null Pointer Exception when inflating from XML (Not using TabActivity)从 XML 膨胀时出现空指针异常(不使用 TabActivity)
【发布时间】:2010-12-22 05:43:15
【问题描述】:

我目前正在尝试调试我的 Android 应用程序。我已经构建了第一个屏幕,它使用的是 Tab Host。我对 TabHost 做了一些小的修改,以添加一些额外的方法(完整的源代码)来与我的应用程序的其他部分一起工作。

但是,当我尝试运行以下命令时,我在 Inflate 上得到一个空指针异常,它并没有真正告诉我原因。我为我的 SDK 下载了完整的 Android 源代码并将其添加到 eclipse 中,以逐步完成膨胀过程,并查找是否可以通过这种方式获得有关错误的更多信息。

我确切地找到了导致错误的行(源代码如下),但是在单步调试调试器时发生了一些奇怪的事情。逻辑是 if/else 情况,其中 if == true 它应该返回一个 New Parser() 对象,我运行了该代码,它成功地通过了 Parser 的构造函数,但是在从那里返回之后,下一条指令直接跳出语句组到下一行返回 null。

构造函数似乎运行正常(它位于 XmlBlock.java 中,以防您想知道)但它仍然跳到下一行并返回 null,我不知道这是为什么。我已经搜索了解决方案,但到目前为止,唯一类似的问题是有人使用不适合我的应用程序的 TabActivity 遇到的。我需要由我在项目中定义的对象(类似于 IOS 样式的视图控制器)生成选项卡及其视图,而不是通过使用 Intent 来启动新活动来分离进程。

有人可以看看我的来源并告诉我我在这里做错了什么,因为似乎没有其他人可以告诉我问题出在哪里?这是另一个指向相关来源的直接链接:http://pastebin.com/9VRE2UGW

【问题讨论】:

  • 如果您在 Activity 中“添加一些额外的方法”以“使用应用程序的其他部分”,这听起来像是您做错了什么。
  • 我真的不喜欢 Android 是如何将活动中的所有内容分类为上帝/分类的,这会将 UI 和控制器逻辑混为一谈。我更喜欢提供的更干净的分离 IOS 样式的 ViewController 对象。所以我一直在围绕它们设计我的应用程序。将一个好的 VC 基类组合在一起并从那里开始工作并不难。我已经解决了这些最初的问题,现在已经开始进行更繁重的工作,将我的 CSV 从 Objective-C 移植到 SQLite 解析器到 Java。

标签: android android-widget nullpointerexception android-tabhost


【解决方案1】:

好的,看来我的真正问题是我没有从 Android DDMS 角度查看我的调试信息。我原本以为 Java Debug 透视图会给我所有必要的信息。这个异常的真正原因是在程序的其他地方。现在我正在阅读 logcat,我应该能够自己解决剩下的问题,因为那是我真正的问题(信息不足)。

【讨论】:

  • 只是想我会在这里发表评论,以防有人想知道真正的错误是什么。我在给我的视图充气后忘记调用 TabHost.setup()。我看到的示例是使用 TabActivity(这就是为什么我在这里特别提到我没有使用它的原因。)在某些情况下,您需要在初始化后手动调用 TabHost.setup() 而其他情况下则不需要。我之前没有意识到这一点,并且当我尝试添加选项卡时会生成空指针异常,因为选项卡小部件未在 TabHost 的属性中正确分配。
【解决方案2】:

我怀疑这条线是错误的:

TabBarController UITabBarController = 
    (TabBarController)interfaceBuilder.inflate(R.layout.tab_bar , null);

因为你的R.layout.tab_bar 代表一个TabHost

<?xml version="1.0" encoding="utf-8"?>
<TabHost
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:id="@android:id/tabhost">
        <RelativeLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent">
                <TabWidget
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:id="@android:id/tabs"
                android:layout_alignParentBottom="true" />

                <FrameLayout
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:id="@android:id/tabcontent">
                </FrameLayout>
        </RelativeLayout>
</TabHost>

【讨论】:

  • 好的,谢谢,实际上忘记更新那个标签了。实际上已被正确的完全限定的 Java 类名替换。它仍然无法正常工作。我试图走一条不同的路线并改为执行 View.inflate() 但现在我遇到了 ClassNotFound 异常。 ClassLoader 在运行时找不到给定类而编译器在编译时没有问题的任何原因?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-21
  • 2014-09-26
相关资源
最近更新 更多