2017-02-21 13 views
-2

私はUdacityでAndroidとJavaを学ぶためにGoogleのアンドロイドコースをやっています。現在、私が取り組んでいるプロジェクトは、コーヒーの注文を表すアプリを作ることです。数量のTextViewがあり、+ボタンと - ボタンがあります。クリックすると量が増減します。また、注文サマリーを出力するメソッドを呼び出すSubmit Orderボタンもあります。なぜこのコードを関数に入れないと、NULLポインタ例外が発生しますか?

残念ながら、私はアプリの元のソースコードを失ってしまったので、私はそれを自分で再構築しようとしました。私はそれを働かせましたが、私が元々設計した方法ではありませんでした。私が抱えている問題は、独自のメソッドの外で注文されたコーヒーの量を格納するTextViewを参照すると、NullPointerExceptionのためにアプリケーションがすぐにクラッシュするということです。しかし、display(int number)というメソッドを作成してTextViewを参照すると、アプリケーションは正常に動作します。このNullPointerExceptionの原因は何ですか?以下のリンクを2つのソースコードに提供しました。そのうちの1つはうまく動作し、もう1つはすぐにクラッシュします。

のNullPointerException:このコードでアプリをクラッシュさ https://gist.github.com/CalebF98/eeb7d4144b831b247264ad6a3de0cb76 部分がMainActivity.javaファイル

作品罰金にライン18である: ライン37-39でこの一https://gist.github.com/CalebF98/906967d4ebe8ae4d1293a0a13b01f477 、I上記の例のようにTextViewを参照するための同じコードを保持するメソッドを作成します。これは後で+と - ボタンのメソッドによって呼び出されます。

ありがとうございました!

+1

onCreateメソッドの外にあるので。 – Hareesh

+3

質問に関連コードを入れてください。オフサイトにリンクしないでください。 – EJoshuaS

+0

申し訳ありませんが、私はまだポスティングコードに慣れています、私は何が適切かどうか分からなかった。謝罪いたします。 –

答えて

1

findViewByIdActivityは、最初のコードサンプルではonCreate(Bundle)

でXMLを膨らませた、あなたは外ID「数量」とTextViewを初期化されている必要があります問題を修正ホープonCreateメソッドであるため、Activityオブジェクトが作成されると初期化されます。この時点では、ルートViewが存在しないため、findViewByIdメソッドは、目的のTextViewのビュー階層を検索しようとしていますが、ルートビューはnullです。

2番目のコードサンプルでは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を追加すること

関連する問題