0

正直なところ...私はこのエラーに夢中になっています.. =)) 私はあなたにこれのために夕食を支払うでしょう..

ボタンに java.lang.NullPointerException がありますエラーはコードにあります (MainActivity、関数 doReport() ):

ReportDialog = new Dialog(this);        
ReportDialog.setCancelable(true);
ReportDialog.setContentView(R.layout.report);
ReportDialog.setTitle("GeoClient Report");

button_report = (Button) findViewById(R.id.button_report);

button_report.setOnClickListener(new OnClickListener() { // line 274 **ERROR** NullPointerException
@Override
public void onClick(android.view.View v) {}  });

レイアウト:

<Button
android:id="@+id/button_report"
android:layout_width="500dp"
android:layout_height="wrap_content"
android:text="Report" />

詳細:

  1. まったく同じ状況でトグルボタンを使用しましたが、機能しています...(ビューはクリック可能だと思います)
  2. コードのコメントを外したままにしておくと、button_report = (Button) findViewById(R.id.button_report); とコメント // button_report.setOnClickListener(... 動作します! (したがって、ボタンはレイアウト上にあります)
  3. レイアウトはダイアログとして呼び出され、コードは

    ReportDialog = 新しいダイアログ(これ);
    ReportDialog.setCancelable(true); ReportDialog.setContentView(R.layout.report); ReportDialog.setTitle("GeoClient レポート");

最後にスタック:

11-07 02:47:52.179: E/Teste(10730): TOAST: doLogin: A fazer Report!!!
11-07 02:47:52.519: D/AndroidRuntime(10730): Shutting down VM
11-07 02:47:52.519: W/dalvikvm(10730): threadid=1: thread exiting with uncaught exception (group=0x417aa930)
11-07 02:47:52.597: E/AndroidRuntime(10730): FATAL EXCEPTION: main
11-07 02:47:52.597: E/AndroidRuntime(10730): java.lang.NullPointerException
11-07 02:47:52.597: E/AndroidRuntime(10730):    at com.geoclient.MainActivity.doReport(MainActivity.java:274)
11-07 02:47:52.597: E/AndroidRuntime(10730):    at com.geoclient.MainActivity.onOptionsItemSelected(MainActivity.java:503)
11-07 02:47:52.597: E/AndroidRuntime(10730):    at android.app.Activity.onMenuItemSelected(Activity.java:2597)
11-07 02:47:52.597: E/AndroidRuntime(10730):    at com.android.internal.policy.impl.PhoneWindow.onMenuItemSelected(PhoneWindow.java:1031)
11-07 02:47:52.597: E/AndroidRuntime(10730):    at com.android.internal.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:735)
11-07 02:47:52.597: E/AndroidRuntime(10730):    at com.android.internal.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:152)
11-07 02:47:52.597: E/AndroidRuntime(10730):    at com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:874)
11-07 02:47:52.597: E/AndroidRuntime(10730):    at com.android.internal.view.menu.ListMenuPresenter.onItemClick(ListMenuPresenter.java:166)
11-07 02:47:52.597: E/AndroidRuntime(10730):    at android.widget.AdapterView.performItemClick(AdapterView.java:298)
11-07 02:47:52.597: E/AndroidRuntime(10730):    at android.widget.AbsListView.performItemClick(AbsListView.java:1100)
11-07 02:47:52.597: E/AndroidRuntime(10730):    at android.widget.AbsListView$PerformClick.run(AbsListView.java:2749)
11-07 02:47:52.597: E/AndroidRuntime(10730):    at android.widget.AbsListView$1.run(AbsListView.java:3424)
11-07 02:47:52.597: E/AndroidRuntime(10730):    at android.os.Handler.handleCallback(Handler.java:725)
11-07 02:47:52.597: E/AndroidRuntime(10730):    at android.os.Handler.dispatchMessage(Handler.java:92)
11-07 02:47:52.597: E/AndroidRuntime(10730):    at android.os.Looper.loop(Looper.java:137)
11-07 02:47:52.597: E/AndroidRuntime(10730):    at android.app.ActivityThread.main(ActivityThread.java:5227)
11-07 02:47:52.597: E/AndroidRuntime(10730):    at java.lang.reflect.Method.invokeNative(Native Method)
11-07 02:47:52.597: E/AndroidRuntime(10730):    at java.lang.reflect.Method.invoke(Method.java:511)
11-07 02:47:52.597: E/AndroidRuntime(10730):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:795)
11-07 02:47:52.597: E/AndroidRuntime(10730):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:562)
11-07 02:47:52.597: E/AndroidRuntime(10730):    at dalvik.system.NativeStart.main(Native Method)
11-07 02:47:54.773: I/Process(10730): Sending signal. PID: 10730 SIG: 9
4

1 に答える 1

3

ボタンがダイアログにある場合

次に、button_report = (Button) findViewById(R.id.button_report); この行を

button_report = (Button)ReportDialog.findViewById(R.id.button_report);

メイン レイアウト ビューでボタンが見つかるため、メイン ビューでこのダイアログのコンポーネントが見つかりません。そのため、インスタンス化しながらビューを定義します。

そうしないと

クリック イベントを次のように変更します。

button_report = (Button)findViewById(R.id.button_report);

button_report.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {}  });

のみandroid.view.Viewに 変更View

于 2013-11-07T03:35:36.447 に答える