2012-02-17 2 views
0

Я иногда получаю исключение с нулевым указателем с моим кодом. Как ни странно, это не происходит каждый раз, и я не знаю, почему. Помогите?Исключение Null Pointer с setOnClickListener()

package net.obviam.droidz; 
public class HomeView extends Activity { 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 



    setContentView(R.layout.menu); 



    Button page1 = (Button) findViewById(R.id.Button01); 
     page1.setOnClickListener(new View.OnClickListener() { 
       public void onClick(View view) { 
//     Intent i = getIntent(); 
        Intent myIntent = new Intent(view.getContext(), DroidzActivity.class); 
        startActivityForResult(myIntent, 0); 
       } 

    }); 


} 



protected void onDestroy() { 
//  Log.d(TAG, "Destroying.."); 
     super.onDestroy(); 
    } 
    @Override 
    protected void onStop() { 
//  Log.d(TAG, "Stopping..."); 
     super.onStop(); 
    } 

} 

Logcat говорит, что проблема связана с строкой 19, setOnClickListener. Я не уверен, что с ним не так. Кажется, он ничего не ссылается.

Logcat звучит так:

02-17 16:52:13.816: E/AndroidRuntime(23756): FATAL EXCEPTION: main 
02-17 16:52:13.816: E/AndroidRuntime(23756): java.lang.RuntimeException: Unable to start activity ComponentInfo{net.obviam.droidz/net.obviam.droidz.HomeView}: java.lang.NullPointerException 
02-17 16:52:13.816: E/AndroidRuntime(23756): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1651) 
02-17 16:52:13.816: E/AndroidRuntime(23756): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1667) 
02-17 16:52:13.816: E/AndroidRuntime(23756): at android.app.ActivityThread.access$1500(ActivityThread.java:117) 
02-17 16:52:13.816: E/AndroidRuntime(23756): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:935) 
02-17 16:52:13.816: E/AndroidRuntime(23756): at android.os.Handler.dispatchMessage(Handler.java:99) 
02-17 16:52:13.816: E/AndroidRuntime(23756): at android.os.Looper.loop(Looper.java:130) 
02-17 16:52:13.816: E/AndroidRuntime(23756): at android.app.ActivityThread.main(ActivityThread.java:3687) 
02-17 16:52:13.816: E/AndroidRuntime(23756): at java.lang.reflect.Method.invokeNative(Native Method) 
02-17 16:52:13.816: E/AndroidRuntime(23756): at java.lang.reflect.Method.invoke(Method.java:507) 
02-17 16:52:13.816: E/AndroidRuntime(23756): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:842) 
02-17 16:52:13.816: E/AndroidRuntime(23756): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600) 
02-17 16:52:13.816: E/AndroidRuntime(23756): at dalvik.system.NativeStart.main(Native Method) 
02-17 16:52:13.816: E/AndroidRuntime(23756): Caused by: java.lang.NullPointerException 
02-17 16:52:13.816: E/AndroidRuntime(23756): at net.obviam.droidz.HomeView.onCreate(HomeView.java:19) 
02-17 16:52:13.816: E/AndroidRuntime(23756): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
02-17 16:52:13.816: E/AndroidRuntime(23756): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1615) 
02-17 16:52:13.816: E/AndroidRuntime(23756): ... 11 more 

А вот файл манифеста:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="net.obviam.droidz" 
android:versionCode="1" 
android:versionName="1.0" > 

<uses-sdk android:minSdkVersion="10" /> 

<application 
    android:icon="@drawable/images" 
    android:label="@string/app_name" android:debuggable="true"> 
    <activity android:name=".HomeView" android:label="@string/app_name"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
    <activity android:name=".DroidzActivity"></activity> 

</application> 

А вот файл XML, что кнопка находится в:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 

<Button android:text="Start Game!" 
     android:id="@+id/Button01" 
     android:layout_width="250dp" 
     android:textSize="18dp" 
     android:layout_height="55dp"> 
    </Button> 



</LinearLayout> 
+1

Это означает, что 'page1' равно null, поэтому, вероятно,' findViewById' не возвращает действительный объект. – Tudor

+0

Кроме того, эта проблема возникает только при нажатии клавиши «Назад» или при попытке перезапустить ее после нажатия клавиши «Назад». Не знаю, насколько это важно. – jmarple

ответ

2

Af не тер чтение через трассировку стека при условии, я думаю, что проблема в том, когда вы начинаете новое намерение, вы передать контекст своей деятельности, а не вида по:

Button page1 = (Button) findViewById(R.id.Button01); 
page1.setOnClickListener(new View.OnClickListener() { 
    public void onClick(View view) { 
     Intent myIntent = new Intent(getContext(), DroidzActivity.class); // fix View.getContext() to getContext() 
     startActivity(myIntent); // change to startActivity 
    } 
}); 

Как почему это перемежающаяся проблема, у меня нет идея.

+0

Это сработало! Однако теперь, нажав кнопку «Назад», действие становится серым. Связано это, или мне нужно полностью реализовать что-то еще? – jmarple

+0

@kpeort Рад помочь. Если бы вы могли принять ответ, если он исправил вашу проблему. Почему ваша деятельность становится серой, я понятия не имею. Если вы не переопределяете некоторые анимации в onCreate и onResume, а onPause, я не слышал об этом. –

+1

@kpeort: вы используете 'startActivityForResult (...)', но ваш код для функции HomeView 'Activity' не показывает блок кода onActivityResult (...)'. Если вы не реализуете этот метод, вы не можете ожидать какого-либо разумного поведения. Также, если ваш 'DroidzActivity' не возвращает результат в тот момент, когда вы нажимаете кнопку BACK (например, в методе' onPause() '), снова вы не можете ожидать разумного поведения. Исправьте оба эти аспекта и посмотрите, что произойдет. – Squonk

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