2013-07-24 7 views
0

Так что я пытаюсь сделать, это сделать Dialog, который отображается при нажатии на определенный Button. Это код:Я не знаю, как исправить это исключение NullPointerException

final Dialog dialog = new Dialog(this, android.R.style.Theme_Translucent); 
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); 
dialog.setContentView(R.layout.alert_start); 

      ImageButton ok = (ImageButton)findViewById(R.id.button_ok); 
      ok.setOnClickListener(new OnClickListener() { 

       @Override 
       public void onClick(View v) { 
        SharedPreferences settings = getSharedPreferences(CheckpointsActivity.PREFS_NAME, 0); 
        SharedPreferences.Editor editor = settings.edit(); 
        editor.putInt(CheckpointsActivity.PREFS_CURRENT_CHECKPOINT, -1); 
        editor.putInt(CheckpointsActivity.PREFS_CURRENT_HINT, 1); 
        editor.putBoolean(CheckpointsActivity.PREFS_TIMER_IS_PAUSED, false); 
        editor.commit(); 

        Intent intent = new Intent(PlaceItemActivity.this, CheckpointsActivity.class); 
        intent.putExtra(MainActivity.INTENT_PLACE_ITEM_ID, placeItem.id); 
        //intent.setClass(this, CheckpointsActivity.class); 
        startActivity(intent); 
       } 
      }); 

      ImageButton cancel = (ImageButton)findViewById(R.id.button_negative); 
      cancel.setOnClickListener(new OnClickListener() { 

       @Override 
       public void onClick(View v) { 
       dialog.dismiss(); 
      } 
    }); 
    dialog.show(); 

Как только я нажимаю Button, приложение падает. Это файл LogCat:

07-24 20:45:00.261: E/AndroidRuntime(17139): FATAL EXCEPTION: main 
07-24 20:45:00.261: E/AndroidRuntime(17139): java.lang.NullPointerException 
07-24 20:45:00.261: E/AndroidRuntime(17139): at android.view.ViewGroup.addViewInner(ViewGroup.java:3338) 
07-24 20:45:00.261: E/AndroidRuntime(17139): at android.view.ViewGroup.addView(ViewGroup.java:3210) 
07-24 20:45:00.261: E/AndroidRuntime(17139): at android.view.ViewGroup.addView(ViewGroup.java:3186) 
07-24 20:45:00.261: E/AndroidRuntime(17139): at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:289) 
07-24 20:45:00.261: E/AndroidRuntime(17139): at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:279) 
07-24 20:45:00.261: E/AndroidRuntime(17139): at android.app.Dialog.setContentView(Dialog.java:482) 
07-24 20:45:00.261: E/AndroidRuntime(17139): at si.dvanadva.evanturist.PlaceItemActivity.onClick(PlaceItemActivity.java:673) 
07-24 20:45:00.261: E/AndroidRuntime(17139): at android.view.View.performClick(View.java:4204) 
07-24 20:45:00.261: E/AndroidRuntime(17139): at android.view.View$PerformClick.run(View.java:17355) 
07-24 20:45:00.261: E/AndroidRuntime(17139): at android.os.Handler.handleCallback(Handler.java:725) 
07-24 20:45:00.261: E/AndroidRuntime(17139): at android.os.Handler.dispatchMessage(Handler.java:92) 
07-24 20:45:00.261: E/AndroidRuntime(17139): at android.os.Looper.loop(Looper.java:137) 
07-24 20:45:00.261: E/AndroidRuntime(17139): at android.app.ActivityThread.main(ActivityThread.java:5041) 
07-24 20:45:00.261: E/AndroidRuntime(17139): at java.lang.reflect.Method.invokeNative(Native Method) 
07-24 20:45:00.261: E/AndroidRuntime(17139): at java.lang.reflect.Method.invoke(Method.java:511) 
07-24 20:45:00.261: E/AndroidRuntime(17139): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
07-24 20:45:00.261: E/AndroidRuntime(17139): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
07-24 20:45:00.261: E/AndroidRuntime(17139): at dalvik.system.NativeStart.main(Native Method) 

LogCat говорит, что проблема заключается в строке 673. Это линия 673:

dialog.setContentView(R.layout.alert_start); 

Я действительно понятия не имею, как подойти к решению этой. Раньше у меня был nullpointerexceptions, но никогда с Dialogs. Что может быть неправильным?

alert_start код XML:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/alert_start" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:orientation="vertical" 
android:background="@color/dim" 
android:padding="30dp" 
> 

<ImageButton 
    android:id="@+id/button_ok" 
    android:layout_width="58dp" 
    android:layout_height="58dp" 
    android:layout_alignParentRight="true" 
    android:layout_centerVertical="true" 
    android:background="@drawable/btn_forward" 
    android:scaleType="fitXY" 

    /> 

<ImageButton 
    android:id="@+id/button_negative" 
    android:layout_width="58dp" 
    android:layout_height="58dp" 
    android:layout_alignParentLeft="true" 
    android:layout_centerVertical="true" 
    android:background="@drawable/btn_exit" 
    android:scaleType="fitXY" 

    /> 

<TextView 
    android:id="@+id/textView2" 
    android:layout_width="wrap_content" 
    android:layout_height="50dp" 
    android:layout_centerVertical="true" 
    android:layout_toRightOf="@+id/button_negative" 
    android:layout_toLeftOf="@+id/button_ok" 
    android:layout_margin="5dp" 

    android:text="@string/alert_start" 
    android:gravity="center_horizontal|center_vertical" 
    android:textAppearance="?android:attr/textAppearanceSmall" 
    android:textColor="@color/black" 
    android:background="@drawable/background_rounded_corners" /> 

Line 676:

ok.setOnClickListener(new OnClickListener() { 
+0

Вы можете разместить макет alert_start здесь? – Phani

+0

Является ли этот код внутри 'onClick()'? – codeMagic

+0

Вы проверили, чтобы гарантировать, что R и его поле, макет и, наконец, alert_start, являются не нулевыми? – StormeHawke

ответ

1

Я считаю, что ваша проблема с Context. Изменение

final Dialog dialog = new Dialog(this, android.R.style.Theme_Translucent); 

в

final Dialog dialog = new Dialog(YourActivityName.this, android.R.style.Theme_Translucent); 

, как вы есть, this имеет в виду onClickListener и не Activity Context. Это ваша оригинальная проблема.

Ваша следующая проблема, как сказал MH в комментариях, вы пытаетесь получить okButton от Activity макета, но вы должны получить его из Dialog макета, так что возвращается null.

Update

Попробуйте

ImageButton ok = (ImageButton) dialog.findViewById(R.id.button_ok); 
+0

Я уже сделал это, я попробовал оба. Когда я использую «this», я получаю ошибку в строке 673, которая является диалогом, и при использовании имени активности я получаю ошибку в строке 676, которая является прослушивателем onclick. – Guy

+0

Да, но мое решение позаботится о вашей оригинальной проблеме, поэтому «Ошибка 673 больше. Он перемещается и обнаруживает новую ошибку в строке 676, потому что 'ok' является' null' – codeMagic

+0

О, но как же тогда решить следующую проблему? Как я могу получить кнопку ok из диалога? – Guy

Смежные вопросы