2016-05-29 9 views
-1

私は多くの同様の質問を見て、与えられた解決方法を実装しようとしました。私が構築しようとしているアプリケーションを壊す 'NullPointerException'を取り除くことはできません。私はいつもこの方法を問題なくボタンに使用してきましたが、この問題をどう解決するかはわかりません。setOnClickListenerでのNullPointerExceptionの問題

以下は私の単純なJavaクラスです。ここでは、 'setOnClickListener'メソッドが警告をトリガします。

public class pennState extends AppCompatActivity { 
    Button buttonNext; 
@Override 
public void onCreate(Bundle savedInstanceState){ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.penn_state_1); 

    buttonNext = (Button) findViewById(R.id.buttonNext); 
    buttonNext.setOnClickListener(myHandler1); 

} 
View.OnClickListener myHandler1 = new View.OnClickListener() { 
    public void onClick(View v) { 
     Intent i = new Intent(pennState.this, pennState2.class); 
     startActivity(i); 
    } 
}; 
} 

xmlプロパティのIDを確認して、すべてが正確であるようです。どんな助けも歓迎です。

<Button 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Next" 
     android:id="@+id/buttonNext" 
     android:layout_alignTop="@+id/buttonConfirm" 
     android:layout_toEndOf="@+id/textView95" /> 

ありがとうございます! :)

+0

エラーログを投稿すると、より良い方法をお手伝いします。 – pooyan

+0

私はそうは思わない。 myHandler1変数がNPEを投げていることは、本当に明白です。 – RoccoDev

+0

* 'setOnClickListener'メソッドが警告をトリガする*。潜在的にNPEになる可能性があることを警告しているのは気のせいです。あなたがあなたのレイアウトでウィジェットを宣言した場合、それを無視することができます – Blackbelt

答えて

3

あなたはそれを宣言する前にその変数を呼び出しています。また、myHandler1をonCreate()に配置します。

また、XMLタグ

android:onClick="myMethod" 

にこのプロパティを追加し、この方法

public void myMethod(View view){} 

を宣言し、ボタンが中括弧の間でクリックされたときに、何をしたいのかに置くことができます。

+0

まず、これは問題ではありません。第二に、あなたが重複として質問にフラグを立てるなら、あなたはそれに答えるべきではありません。 –

0

ボタンと一緒に、上記の変数宣言を入れ、そしてonCreateでそれを初期化します。

public class pennState extends AppCompatActivity { 
Button buttonNext; 
View.OnClickListener myHandler1; 
@Override 
public void onCreate(Bundle savedInstanceState){ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.penn_state_1); 

    myHandler1 = new View.OnClickListener() { 
     public void onClick(View v) { 
      Intent i = new Intent(pennState.this, pennState2.class); 
      startActivity(i); 
    } 
}; 

    buttonNext = (Button) findViewById(R.id.buttonNext); 
    buttonNext.setOnClickListener(myHandler1); 
} 
+0

そして...私はあなたの前で何を言ったのですか? – RoccoDev

+0

お、申し訳ありませんが、私は他のタブを見ている間に新しい答えを読み込むのを忘れてしまいました。お塩味をつけないでください:) – Vucko

+0

それは私にも起こります; D心配しないでください – RoccoDev

0

あなたは単に代わりにローカル変数としてこれを宣言するのボタンのsetOnClickListenernew OnClickListenerを渡すことができます。

@Override 
    public void onCreate(Bundle savedInstanceState){ 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.penn_state_1); 

     buttonNext = (Button) findViewById(R.id.buttonNext); 
     buttonNext.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) { 
      Intent i = new Intent(pennState.this, pennState2.class); 
      startActivity(i); 
      } 
     }); 
    } 
関連する問題