-2

Nexsus 4 でアプリを起動すると、強制終了するようです。私だけがだまされている可能性が高いですが、コードに問題は見つかりません。

Android Studio ではエラーは発生しません。コメントアウトされたリセットメソッドは、チェックボックスとTextViewをリセットするはずです。

onCreate の前に項目を定義できないのはなぜですか? そして、「リセット」メソッドでそれらを使用できなくなった後にそれらを定義すると..

誰か見てもらえませんか?

package com.example.myapplication;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.TextView;
public class MainActivity extends Activity {

    final TextView txtTest = (TextView) findViewById(R.id.txtOut);
    final CheckBox chkTest = (CheckBox) findViewById(R.id.chkTest);
    final Button btnTest = (Button) findViewById(R.id.btnTest);
    final EditText etTest = (EditText) findViewById(R.id.etTest);
    String text = "";

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

            chkTest.setChecked(true);

            chkTest.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                            if (chkTest.isChecked()) {
                                    txtTest.setText("Checked :)");
                            } else txtTest.setText("Not Checked");
                    }
            });

            btnTest.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                            //etTest.getText().toString(text);
                            text = etTest.toString();
                      // Reset(text);
                    }
            });
            /*void Reset(String text) {
                    chkTest.setChecked(false);
                    txtTest.setText(text);
            }*/
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
            // Inflate the menu; this adds items to the action bar if it is present.
            getMenuInflater().inflate(R.menu.main, menu);
            return true;
    }
}

これはlogcatエラーです:

java.lang.RuntimeException: Unable to instantiate activity
ComponentInfo{[...].MyActivity}: java.lang.NullPointerException
4

4 に答える 4

4

この方法ではアイテムを初期化できません! コードが実行されたときにレイアウトはまだ膨張していないfinal TextView txtTest = (TextView) findViewById(R.id.txtOut);ため、ヌルポインター例外が発生します。また、onCreate() の外部で reset() メソッドを定義します。以下のコードを参照してください。

    TextView txtTest = null;
    CheckBox chkTest = null;
    Button btnTest = null;
    EditText etTest = null;

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

    txtTest = (TextView) findViewById(R.id.txtOut);
    chkTest = (CheckBox) findViewById(R.id.chkTest);
    btnTest = (Button) findViewById(R.id.btnTest);
    etTest = (EditText) findViewById(R.id.etTest);

    ....
 }


 void reset(String text) {
      chkTest.setChecked(false);
      txtTest.setText(text);
 }
于 2013-07-18T07:44:13.233 に答える
2

まだ作成されていないときにビューを見つけることができません。これを試してください:

package com.example.myapplication;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.TextView;
public class MainActivity extends Activity {

    TextView txtTest = null;
    CheckBox chkTest = null;
    Button btnTest = null;
    EditText etTest = null;
    String text = "";

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

            txtTest = (TextView) findViewById(R.id.txtOut);
            chkTest = (CheckBox) findViewById(R.id.chkTest);
            btnTest = (Button) findViewById(R.id.btnTest);
            etTest = (EditText) findViewById(R.id.etTest);


            chkTest.setChecked(true);

            chkTest.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                            if (chkTest.isChecked()) {
                                    txtTest.setText("Checked :)");
                            } else txtTest.setText("Not Checked");
                    }
            });

            btnTest.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                            //etTest.getText().toString(text);
                            text = etTest.toString();
                      // Reset(text);
                    }
            });
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
            // Inflate the menu; this adds items to the action bar if it is present.
            getMenuInflater().inflate(R.menu.main, menu);
            return true;
    }
    private void Reset(String text) {
            chkTest.setChecked(false);
            txtTest.setText(text);
    }

}
于 2013-07-18T07:40:42.813 に答える
0

You cant cause the items your are initializing is on the activity_main.xml and you set the content view after the initialization. Do the initialization in the onCreate().

于 2013-07-18T07:39:56.067 に答える