0

私はAndroidを初めて使用し、ボタンをクリックするとボタンのテキストを変更するイベントリスナーで遊ぶための初心者アプリを開始しました...開発者ガイド(http://developer.android.com )に従ってください/guide/topics/ui/ui-events.html#EventListeners)、ビュー(TextViewとButton)とメインアクティビティを使用してレイアウトを作成しました。しかし、コードをコンパイルするときに、.apk(Eclipse)をADVに送信してアプリを起動すると、エラーのリストが表示されます。

04-26 21:37:22.615: D/dalvikvm(637): Not late-enabling CheckJNI (already on)
04-26 21:37:23.845: I/dalvikvm(637): threadid=3: reacting to signal 3
04-26 21:37:24.205: I/dalvikvm(637): Wrote stack traces to '/data/anr/traces.txt'
04-26 21:37:24.805: D/AndroidRuntime(637): Shutting down VM
04-26 21:37:24.805: W/dalvikvm(637): threadid=1: thread exiting with uncaught exception (group=0x409c01f8)
04-26 21:37:24.906: E/AndroidRuntime(637): FATAL EXCEPTION: main
04-26 21:37:24.906: E/AndroidRuntime(637): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.examples.fragmentos/com.examples.fragmentos.TestFragmentosActivity}: java.lang.NullPointerException
04-26 21:37:24.906: E/AndroidRuntime(637):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1880)
04-26 21:37:24.906: E/AndroidRuntime(637):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
04-26 21:37:24.906: E/AndroidRuntime(637):  at android.app.ActivityThread.access$600(ActivityThread.java:123)
04-26 21:37:24.906: E/AndroidRuntime(637):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
04-26 21:37:24.906: E/AndroidRuntime(637):  at android.os.Handler.dispatchMessage(Handler.java:99)
04-26 21:37:24.906: E/AndroidRuntime(637):  at android.os.Looper.loop(Looper.java:137)
04-26 21:37:24.906: E/AndroidRuntime(637):  at android.app.ActivityThread.main(ActivityThread.java:4424)
04-26 21:37:24.906: E/AndroidRuntime(637):  at java.lang.reflect.Method.invokeNative(Native Method)
04-26 21:37:24.906: E/AndroidRuntime(637):  at java.lang.reflect.Method.invoke(Method.java:511)
04-26 21:37:24.906: E/AndroidRuntime(637):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
04-26 21:37:24.906: E/AndroidRuntime(637):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
04-26 21:37:24.906: E/AndroidRuntime(637):  at dalvik.system.NativeStart.main(Native Method)
04-26 21:37:24.906: E/AndroidRuntime(637): Caused by: java.lang.NullPointerException
04-26 21:37:24.906: E/AndroidRuntime(637):  at android.app.Activity.findViewById(Activity.java:1794)
04-26 21:37:24.906: E/AndroidRuntime(637):  at com.examples.fragmentos.TestFragmentosActivity.<init>(TestFragmentosActivity.java:12)
04-26 21:37:24.906: E/AndroidRuntime(637):  at java.lang.Class.newInstanceImpl(Native Method)
04-26 21:37:24.906: E/AndroidRuntime(637):  at java.lang.Class.newInstance(Class.java:1319)
04-26 21:37:24.906: E/AndroidRuntime(637):  at android.app.Instrumentation.newActivity(Instrumentation.java:1023)
04-26 21:37:24.906: E/AndroidRuntime(637):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1871)
04-26 21:37:24.906: E/AndroidRuntime(637):  ... 11 more
04-26 21:37:25.415: I/dalvikvm(637): threadid=3: reacting to signal 3
04-26 21:37:25.485: I/dalvikvm(637): Wrote stack traces to '/data/anr/traces.txt'
04-26 21:37:26.325: I/dalvikvm(637): threadid=3: reacting to signal 3
04-26 21:37:26.375: I/dalvikvm(637): Wrote stack traces to '/data/anr/traces.txt'
04-26 21:37:26.535: I/dalvikvm(637): threadid=3: reacting to signal 3
04-26 21:37:26.655: I/dalvikvm(637): Wrote stack traces to '/data/anr/traces.txt'
04-26 21:42:26.155: I/Process(637): Sending signal. PID: 637 SIG: 9

コードは次のとおりです。

package com.examples.fragmentos;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;


public class TestFragmentosActivity extends Activity {

    Button b = ( Button )findViewById( R.id.buttonInfo );

    /** Called when the activity is first created. */
    @Override
    public void onCreate( Bundle savedInstanceState ) {
        super.onCreate( savedInstanceState );

        b.setOnClickListener( mbuttonInfoListener );

        setContentView(R.layout.main);
    }

    // Create an anonymous implementation of OnClickListener
    private OnClickListener mbuttonInfoListener = new OnClickListener() {

        public void onClick( View v ) {
          b.setText("Ey, don't touch me!");
        }
    };

}
4

2 に答える 2

3

問題はの初期化ですb:

Button b = ( Button )findViewById( R.id.buttonInfo );

アクティビティの内容を設定した後、つまり を呼び出した後にのみ、ビューを見つけることができますsetContentView()

これを試して:

private Button b;

@Override
public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);

    setContentView(R.layout.main);
    b = (Button)findViewById(R.id.buttonInfo);
    b.setOnClickListener(mbuttonInfoListener);
}

buttonInfoまた、レイアウトにid が設定されたボタンがあることを確認してください。

于 2012-04-26T19:52:38.920 に答える
1

新しいアクティビティに NullPointerException があります。正しく開始されますが、クラッシュします。エラーは次のとおりです。

04-26 21:37:24.906: E/AndroidRuntime(637): Caused by: java.lang.NullPointerException
04-26 21:37:24.906: E/AndroidRuntime(637):  at ndroid.app.Activity.findViewById(Activity.java:1794)
04-26 21:37:24.906: E/AndroidRuntime(637):  at com.examples.fragmentos.TestFragmentosActivity.init>(TestFragmentosActivity.java:12)

問題はそこにあるため、TestFragmentosActivity の 12 行目のコードを確認してください。

編集 -

12行目はこれだと思います:

Button b = ( Button )findViewById( R.id.buttonInfo );

ビューが作成される前にビューを取得しようとしています。これは、setContentView でビューを設定した後に呼び出す必要があります。簡単な解決策の 1 つは、次のようにオブジェクトを宣言することです。

Button b;

onCreate 関数の最後に以下を追加します。

b = ( Button )findViewById( R.id.buttonInfo );
于 2012-04-26T19:51:27.130 に答える