2012-03-18 6 views
1

私はこれについて別の質問を投稿しましたが、問題を絞り込んで別の質問をしました。私の問題は、最初のString strTimeが作成された行の内側のonClickの内側からnullポインタ例外が発生していることです。この理由は、poptest.xmlが適切に膨張していないことが示唆されています。なぜこれが起こっているのか誰にも見えますか? DialogであるあなたのEditText場合XMLのインフレーションとEditText

@Override 
public void onClick(View v) { 

    switch (v.getId()) { 

    case R.id.newappt: 

     final Dialog dialog = new Dialog(this); 
     dialog.setContentView(R.layout.poptest); 
     dialog.setTitle("Create New Appointment"); 
     dialog.setCancelable(true); 

     Button buttoncancel = (Button) dialog.findViewById(R.id.Button01); 
     buttoncancel.setOnClickListener(new OnClickListener() { 

     // on click for cancel button 
      @Override 
      public void onClick(View v) { 
       dialog.dismiss(); 
      } 
     }); 

     Button buttonsave = (Button) dialog.findViewById(R.id.Button02); 
     buttonsave.setOnClickListener(new OnClickListener() { 

     // on click for save button 
      @Override 
      public void onClick(View v) { 

      String strTime = ((EditText) findViewById(R.id.evnttime)).getText().toString(); 

      String strTitle = ((EditText) findViewById(R.id.evnttitle)).getText().toString(); 

      String strDet = ((EditText) findViewById(R.id.evntdet)).getText().toString(); 



      cursor = getAppts(); 
      addAppt(strTime, strTitle, strDet); 
      showAppts(cursor); 
      dialog.dismiss(); 
    } 
     }); 

     dialog.show(); 
     break; 

    case R.id.delappt: 
     rmvall(); 
     break; 
    } 

} 

答えて

2

はこれを試してみてください:

String strTime = ((EditText) dialog.findViewById(R.id.evnttime)).getText().toString(); 
String strTitle = ((EditText) dialog.findViewById(R.id.evnttitle)).getText().toString(); 
String strDet = ((EditText) dialog.findViewById(R.id.evntdet)).getText().toString(); 
0
  String strTime = ((EditText) dialog.findViewById(R.id.evnttime)).getText().toString(); 

     String strTitle = ((EditText) dialog.findViewById(R.id.evnttitle)).getText().toString(); 

     String strDet = ((EditText) dialog.findViewById(R.id.evntdet)).getText().toString(); 
0

が私の最初の推測は、onClickのリスナー内部findViewByIdが検索されていることだろう

私はこの方法を持っていますbuttonsaveの子としてR.id.evnttimeのために。

findViewByIdメソッドはViewクラスに属しているため、ボタン、レイアウトなどのすべてのサブクラスに使用できます。 使用するビューの最後の子を検索しています。

ここで解決策があります: あなたのビューをonClickメソッドの外に見つけるか、メインビュー(ダイアログ)のfindViewById関数を使用してください。

+0

'findViewById()'(ビューを指定せずに)はあなたの 'Activity'の一部ですので、あなたが設定したビュー階層を常に見ます。 onCreate()で 'setContentView()'を実行します。 (ダイアログはその階層の一部ではありません) – zapl

+0

あなたは正しいですが、このfindViewById()もandroid.viewパッケージに由来しています。なぜなら、setContentView()ではウィンドウリソースを設定するからです。アクティビティのfindViewById()は、 "return getWindow()。findViewById(id);"で定義されます。 :) – KarlKarlsom