2012-02-17 18 views
0

私のコードでは、nullポインタ例外が発生することがあります。奇妙なことに、これは毎回起こるわけではありませんし、私はなぜそれがわかりません。助けて?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'がヌルであることを意味するので、おそらく' findViewById'は有効なオブジェクトを返すことに失敗しています。 – Tudor

+0

また、この問題は、バックキーを押すとき、またはバックキーを押した後に再起動しようとしたときにのみ発生します。それが重要かどうかはわかりません。 – jmarple

答えて

2

af TER提供スタックトレースを通読、私はあなたが活動のコンテキストを渡すために、あなたは新しい意思を起動するときに問題があると思い、NOT閲覧者:これはintermitent問題である理由については

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'が(' onPause() 'メソッドで)BACKボタンをクリックした時点で結果を返さない場合、やはり賢明な動作を期待できません。これらの側面の両方を修正し、何が起こるかを見てください。 – Squonk

関連する問題