2017-09-24 4 views
-2

私はAndroid開発の初心者です。私のアプリは完璧にコンパイルされています(エラーも警告もありません)が、起動時にクラッシュします。私はクラッシュの原因をNullPointerExceptionと診断しました。この宣言に応じてすべての行と同様にTextView output = (TextView) findViewById(R.id.outputbox);を削除すると、アプリが正常に起動することがわかりました。私は研究を行いました(スタック・エクスチェンジのオン・オフ、およびGoogleの結果約5ページ)、私が見つけた解決策はありませんでした。それが私がこの質問をしている理由です。私はTextView output = (TextView) findViewById(R.id.outputbox);outputboxの前にsetContentView(R.layout.activity_main);を実行しました。これはactivity_main.xmlで宣言されています。これは既存の質問と重複しているわけではありません。他の質問への回答が私の問題を解決しなかったからです。findViewByIdにより、明らかな理由がないためNullPointerExceptionが発生します

+0

.xmlとアクティビティコードを投稿してください。 –

+0

.xmlコードを投稿 –

+0

特定のシナリオで既製のソリューションを見つけることはめったにありません。重要な点は、問題を理解し解決することです。 – shmosel

答えて

0

おそらく、変数outputの宣言と初期化がクラスにあります。これはうまくいきません。メソッドfindViewByIdは、setContentViewメソッドが呼び出された後にのみ機能します。

public class MainActivity extends AppCompatActivity { 

    TextView output; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     output = (TextView) findViewById(R.id.outputbox) 
    } 

} 

方法findViewById検索をXMLであなたのコンポーネントのために:あなたはクラスで自分の変数を宣言する必要がありますが、すぐにsetContentViewメソッドの後に方法onCreateでそれを初期化する理由です。これが機能するには、このアクティビティで使用されるXMLファイルを指摘する必要があります。これはsetContentView(R.layout.activity_main);コマンドで行われます。それは一般的な間違いですので、心配はありません:)

+0

宣言と初期化は、クラス内の同じ行にありますが、メソッドの後にあります。なぜそれがうまくいかないのでしょうか? – person

+0

クラス内の変数の宣言と初期化は、メソッドのANYが呼び出される前に発生します。したがって、初期化はクラスで実行される最初のコードになります。 Activity Lifecycleについて読む - アクティビティが画面上で視覚化されると、onCreateメソッドが呼び出され、次にfindViewByIdメソッドが機能します。クラス内でfindViewByIdを使用しないでください。これは、AFTER onCreate: –

+0

というメソッドでのみ使用できます。できるだけ早くActivity Lifecycleについて読むことにします。お手伝いありがとう。 – person

関連する問題