2017-03-06 10 views
0

Android StudioまたはJavaでアプリケーションを開発するのは比較的新しいですが、最近はわからない問題が発生しました。今のところ私が達成しようとしているのは、Buttonがクリックされた後にEditTextフィールドの内容を出力することです。onClickメソッド内のEditText要素の内容を出力できません

Activityにボタンを追加する可能性が最も高いので、を使用して、switchステートメント内のさまざまなボタンアクションを分けることができます。私はジェネリックonClickメソッドを使用しようとすると、今

package com.example.user.myapp; 

import android.app.Activity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 

public class MainActivity extends Activity { 

    private EditText testText; 
    private Button testButton; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     // initialize UI elements 
     final EditText testText = (EditText) findViewById(R.id.testText); 
     testButton = (Button) findViewById(R.id.testButton); 

     // set onClick listener 
     testButton.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      // it will print the content of testText as long as the "testText" variable is declared as final 
      System.out.println(testText.getText().toString().trim()); 
     } 
     }); 
    } 
} 

、私は突然、次のエラーが表示されます:ここで

は、一般的なonClickメソッドを使用していないonClickListenerがした作業例です

:ここ

java.lang.NullPointerException: Attempt to invoke virtual method 'android.text.Editable android.widget.EditText.getText()' on a null object reference

は、上記呼ばエラーが発生するコードです

package com.example.user.myapp; 

import android.app.Activity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 


public class MainActivity extends Activity implements View.OnClickListener { 

    private EditText testText; 
    private Button testButton; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     // initialize the UI elements 
     EditText testText = (EditText) findViewById(R.id.testText); 
     Button testButton = (Button) findViewById(R.id.testButton); 

     // set onClick Listener 
     testButton.setOnClickListener(this); 
    } 

    @Override 
    public void onClick(View v) { 
     switch(v.getId()) { 
      case R.id.testButton:      
       // this will result in an error          
       System.out.println(testText.getText().toString().trim()); 
       break; 
      default: 
       break; 
    } 
} 

ここに何か不足していますか?あなたはtestText二回

パッケージcom.example.user.myappを動作することを定義している2番目のコードの

+0

あなたのレイアウトをシェアしようとしています。 – uguboz

+5

あなたは 'EditText testText'を二度定義します – Jens

+0

グローバル変数またはローカル変数 – uguboz

答えて

2

import android.app.Activity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText;グローバル

public class MainActivity extends Activity implements View.OnClickListener { 

    private EditText testText; 
    private Button testButton; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     // initialize the UI elements 
     testText = (EditText) findViewById(R.id.testText); 
     testButton = (Button) findViewById(R.id.testButton); 

     // set onClick Listener 
     testButton.setOnClickListener(this); 
    } 

    @Override 
    public void onClick(View v) { 
     switch(v.getId()) { 
      case R.id.testButton:      
       // this will result in an error          
       System.out.println(testText.getText().toString().trim()); 
       break; 
      default: 
       break; 
    } 
} 
+0

Omgを使用して、今私は本当に愚かな気分になります...ありがとう! –

+0

できるだけ早く、私はこの答えを受け入れるでしょう:)乾杯! –

1

Decalre EDITTEXT:

private EditText testText; 

は)(のonCreate内のビューを取得:

testText = (EditText) findViewById(R.id.testText); 

はonClickの中でそれを使用します。

System.out.println(testText.getText().toString().trim()); 
1

あなたは初期化することはありませんprivate EditText testText;

final EditText testText = (EditText) findViewById(R.id.testText); 

onClick(View v)OnClickListenerインタフェースを実装する匿名クラスのメソッドであり、このメソッドは、変数testText初期化されていないフィールドを参照:あなたの代わりに、次の呼び出しでクラスのフィールドを参照するローカル変数を使用します。この問題を解決するには

findViewById()を呼び出す前に、変数の型宣言を削除します。

this.testText = (EditText) findViewById(R.id.testText) 
0

あなたがのEditText 2時間を宣言する必要があり、1はグローバルであり、もう一つはのonCreateメソッド内で、使用しているときonCreateの外側のEdittextは、初期化されていないグローバル変数を取得しています。なぜこのエラーが発生しているのですか?これを使用する

public class MainActivity extends Activity implements View.OnClickListener { 

    private EditText testText; 
    private Button testButton; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     // initialize the UI elements 
     testText = (EditText) findViewById(R.id.testText); 
     testButton = (Button) findViewById(R.id.testButton); 

     // set onClick Listener 
     testButton.setOnClickListener(this); 
    } 

    @Override 
    public void onClick(View v) { 
     switch(v.getId()) { 
      case R.id.testButton:      
       // this will result in an error          
       System.out.println(testText.getText().toString().trim()); 
       break; 
      default: 
       break; 
    } 
} 
関連する問題