1

私のコードは私に NullPointerException を与えており、クリーンアンドリビルドを提案する投稿を読みましたが、そのアプローチはこれまでのところ役に立ちませんでした。

私のスタックトレースは次のとおりです。

E/AndroidRuntime(553): FATAL EXCEPTION: main
E/AndroidRuntime(553): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.touchlogger/com.example.touchlogger.MainActivity}: java.lang.NullPointerException
E/AndroidRuntime(553):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1956)
E/AndroidRuntime(553):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
E/AndroidRuntime(553):  at android.app.ActivityThread.access$600(ActivityThread.java:123)
E/AndroidRuntime(553):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
E/AndroidRuntime(553):  at android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime(553):  at android.os.Looper.loop(Looper.java:137)
E/AndroidRuntime(553):  at android.app.ActivityThread.main(ActivityThread.java:4424)
E/AndroidRuntime(553):  at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime(553):  at java.lang.reflect.Method.invoke(Method.java:511)
E/AndroidRuntime(553):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
E/AndroidRuntime(553):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
E/AndroidRuntime(553):  at dalvik.system.NativeStart.main(Native Method)
E/AndroidRuntime(553): Caused by: java.lang.NullPointerException
E/AndroidRuntime(553):  at android.view.ViewGroup.addViewInner(ViewGroup.java:3336)
E/AndroidRuntime(553):  at android.view.ViewGroup.addView(ViewGroup.java:3208)
E/AndroidRuntime(553):  at android.view.ViewGroup.addView(ViewGroup.java:3188)
E/AndroidRuntime(553):  at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:270)
E/AndroidRuntime(553):  at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:260)
E/AndroidRuntime(553):  at android.app.Activity.setContentView(Activity.java:1855)
E/AndroidRuntime(553):  at com.example.touchlogger.MainActivity.onCreate(MainActivity.java:30)
E/AndroidRuntime(553):  at android.app.Activity.performCreate(Activity.java:4465)
E/AndroidRuntime(553):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
E/AndroidRuntime(553):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920)

私のXMLファイルは次のとおりです。

<com.example.touchlogger.DrawView
    android:id="@+id/drawView1"
    android:layout_width="wrap_content"
    android:layout_height="357dp" />

<Button
    android:id="@+id/button1"
    android:layout_width="160dp"
    android:layout_height="49dp"
    android:layout_gravity="center|center_vertical"
    android:layout_marginBottom="29dp"
    android:text="End" />

</LinearLayout>

エラーの原因となっている行は次のとおりです。

setContentView((LinearLayout)(findViewById(R.id.layout)));

私は Android プログラミングの初心者であり、問​​題が非常に単純であっても、私にはまったく意味をなさないのではないかと心配しています。私はこれに 2 日以上費やしましたが、完全に途方に暮れています。drawView にボタンを含めることを決定するまで、私のコードは機能していました。そこが少しバタバタしたところです。それ以来、私は問題を抱えているだけです。

どんな助けでも大歓迎です!前もって感謝します!

4

3 に答える 3

3

findViewById()メソッドの前にメソッドを呼び出しているため、機能setContentView()しません。そのため、まだ作成されていないビューを検索します。代わりにこれを使用してください:

setContentView(R.layout.my_xml_file);
于 2012-11-07T20:58:16.620 に答える
2

互換性のない 2 つの手順を結合しようとしているようです。最初のステップは、どの XML ファイルを膨張させて表示するかをシステムに伝えることです。

setContentView(R.layout.xml_layout_filename);

次に、ボタンまたはDrawViewその他のコントロールを取得する 2 番目のステップでは、次のようなものを使用します。

Button button = (Button)findViewById(R.id.button1);
DrawView drawView = (DrawView)findViewById(R.id.drawView1);
于 2012-11-07T21:02:26.253 に答える
1

これは次のようになります。

setContentView(R.layout.your_xml_file_name_here);
于 2012-11-07T20:55:42.090 に答える