2017-02-21 31 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來的第一個文本視圖解決問題

相關問題