0

ダイアログボックスの[OK]ボタンをクリックするたびに、nullポインタ例外が発生します。

public class TestActivity extends ListActivity {

    private Context context;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        context = this;
        setContentView(R.layout.activity_bucket_crud);

    }

    public void addTestItem(View view) {
        LayoutInflater inflater = getLayoutInflater();
        new AlertDialog.Builder(this)
            .setTitle("Add Item")
            .setIcon(R.drawable.add)
            .setView(inflater.inflate(R.layout.activity_bucket_crudadd, null))
            .setPositiveButton("Ok", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int whichButton) {
                    EditText text = (EditText)findViewById(R.id.editTextAdd);
                    DatabaseHandler myDbHelper = new DatabaseHandler(context);
                    myDbHelper.insertItem(text.getText().toString());
                }
            })
            .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int whichButton) {
                    dialog.cancel();
                }
            }).show();
    }

}

これがエラーです

01-05 09:20:35.052: E/AndroidRuntime(761): FATAL EXCEPTION: main
01-05 09:20:35.052: E/AndroidRuntime(761): java.lang.NullPointerException
01-05 09:20:35.052: E/AndroidRuntime(761):  at com.example.test.TestActivity$1.onClick(TestActivity.java:65)
01-05 09:20:35.052: E/AndroidRuntime(761):  at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:166)

私のレイアウトはこれ

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="150dp">

    <EditText
        android:id="@+id/editTextAdd"
        android:layout_width="wrap_content"
        android:layout_height="100dp"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:ems="10"
        android:inputType="textMultiLine"
        android:layout_margin="5dp" 
        android:padding="3dp">

        <requestFocus />
    </EditText>

</RelativeLayout>

EditText内にテキストを入力すると、値が読み取られていないようです。

EditText text = (EditText)findViewById(R.id.editTextAdd);

行がポイントしているため、これがnullポインタの原因(text.getText().toString()ですか?もしそうなら、どうすればテキストの値を取得できますか?

ありがとうございました

4

2 に答える 2

3

NULLだからEditText textです。ダイアログレイアウトから参照していません。EditText text

行を次のように変更して、何が起こるか教えてください。

 EditText text = (EditText) dialog.findViewById(R.id.editTextAdd);

EditTextダイアログレイアウトから参照を取得するには、メソッドdialogで参照を使用する必要がありますfindViewById()

アップデート:

LayoutInflater inflater = getLayoutInflater();
View view = null;
view  = inflater.inflate(R.layout.activity_bucket_crudadd, null);
        new AlertDialog.Builder(this)
            .setTitle("Add Item")
            .setIcon(R.drawable.add)
            .setView(view)

そして今、次のような編集テキストにアクセスします。

EditText text = (EditText) view.findViewById(R.id.editTextAdd);
于 2013-01-05T09:33:00.530 に答える
2

OnClick()ダイアログリスナーのメソッド内にEditTextインスタンスを作成することはできません。EditTextインスタンスをグローバルオブジェクトとして作成し、データベースに挿入するときに参照を使用します。findViewById()メソッドは子アクティビティ内でのみ使用され、他のクラス/インターフェイス内で使用しようとすると、コンテキストが変更されます。

または、以下のコードを試すことができます。

EditText text = (EditText)TestActivity.this.findViewById(R.id.editTextAdd);
于 2013-01-05T09:30:26.817 に答える