2017-02-21 32 views
-2

我在Udacity上学Google和Android的课程来学习Android和Java。目前,我正在开发的项目是构建一个代表点咖啡的应用程序。有一个数量的TextView,加上一个+和 - 按钮,点击增加或减少数量,以及一个提交订单按钮,该按钮调用打印订单摘要的方法。为什么不把这个代码放入函数会导致空指针异常?

不幸的是,我丢失了应用程序的原始源代码,所以我尝试自己重建它。我得到它的工作,但不是我最初设计的方式。我遇到的问题是,如果我引用存储其自身方法外排序的咖啡数量的TextView,应用程序将立即因NullPointerException而崩溃。但是,如果我通过创建一个名为display(int number)的方法引用该TextView,该应用程序运行良好。什么导致这个NullPointerException?我在下面提供了两个源代码的链接,其中一个可以正常工作,另一个可以立即崩溃。

的NullPointerException: https://gist.github.com/CalebF98/eeb7d4144b831b247264ad6a3de0cb76 ,其崩溃该应用在此代码的部分是在管线18中MainActivity.java文件

正常工作: https://gist.github.com/CalebF98/906967d4ebe8ae4d1293a0a13b01f477 在这其中,在第37-39行,我创建一个保存相同代码的方法,以引用TextView,如上面的示例中所述,稍后由+和 - 按钮的方法调用该方法。

谢谢!

+1

因为它是onCreate方法之外的.. – Hareesh

+3

请把相关的代码放在问题本身,不要只是连接到异地。 – EJoshuaS

+0

对不起,我仍然习惯于发布代码,我不确定相关与否。我很抱歉。 –

回答

1

findViewById要求Activity已经飙升在onCreate(Bundle)

的XML在第一个代码示例,您正在初始化TextView id为“量”外onCreate方法,因此在创建Activity对象时它将被初始化。此时,没有根View,因此findViewById方法尝试搜索所需的TextView的视图层次结构,但根视图是null

在第二个代码示例中,findViewById仅在onClick方法中调用,因此只有在视图层次结构膨胀之后才能调用,因此一切正常。

0
<TextView 
    android:text="Order Summary" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_marginBottom="16dp" 
    android:textAllCaps="true"/> 

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_marginBottom="16dp" 
    android:id="@+id/order_summary" 
    android:text="$0"/> 

你忘了把第一个文本视图的ID。希望加入id来的第一个文本视图解决问题

相关问题