0

OnCreateメソッド、Onstart、さらにはAsyncTaskにタイマーを追加しようとしましたが、プログラムがクラッシュしました。理由はよくわかりません!これが私のコードの一部であり、この場合はOnStartに追加しました。

@Override
    public void onCreate() {
        Toast.makeText(this, "My Service Created", Toast.LENGTH_LONG).show();
        Log.d(TAG, "onCreate");





    }
    private void startTimer()
    {           

        if (found != "Yes Found")
         {


            TimerTask updateProfile = new CustomTimerTask(MyService.this);
            timer.scheduleAtFixedRate(updateProfile, 0, 60*1000);

         }

    }
    @Override
    public void onDestroy() {
        Toast.makeText(this, "My Service Stopped", Toast.LENGTH_LONG).show();
        Log.d(TAG, "onDestroy");
        //spool.release();

    }

    @Override
    public void onStart(Intent intent, int startid) {

        Toast.makeText(this, "My Service Started", Toast.LENGTH_LONG).show();
        Log.d(TAG, "onStart");

        startTimer();


    }

タイマーコード

public class CustomTimerTask extends TimerTask {


            private Context context;
            private Handler mHandler = new Handler();

            // Write Custom Constructor to pass Context
            public CustomTimerTask(Context con) {
                this.context = con;

            }

            @Override
            public void run() {
                // TODO Auto-generated method stub


                  //some code here


            }




            }

エラーメッセージ

03-17 13:16:35.661: E/AndroidRuntime(7634): FATAL EXCEPTION: main
03-17 13:16:35.661: E/AndroidRuntime(7634): java.lang.RuntimeException: Unable to start service com.example.saber.MyService@415c0510 with Intent { cmp=xxxx }: java.lang.NullPointerException
03-17 13:16:35.661: E/AndroidRuntime(7634):     at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2387)
03-17 13:16:35.661: E/AndroidRuntime(7634):     at android.app.ActivityThread.access$1900(ActivityThread.java:127)
03-17 13:16:35.661: E/AndroidRuntime(7634):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1221)
03-17 13:16:35.661: E/AndroidRuntime(7634):     at android.os.Handler.dispatchMessage(Handler.java:99)
03-17 13:16:35.661: E/AndroidRuntime(7634):     at android.os.Looper.loop(Looper.java:137)
03-17 13:16:35.661: E/AndroidRuntime(7634):     at android.app.ActivityThread.main(ActivityThread.java:4511)
03-17 13:16:35.661: E/AndroidRuntime(7634):     at java.lang.reflect.Method.invokeNative(Native Method)
03-17 13:16:35.661: E/AndroidRuntime(7634):     at java.lang.reflect.Method.invoke(Method.java:511)
03-17 13:16:35.661: E/AndroidRuntime(7634):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:976)
03-17 13:16:35.661: E/AndroidRuntime(7634):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:743)
03-17 13:16:35.661: E/AndroidRuntime(7634):     at dalvik.system.NativeStart.main(Native Method)
03-17 13:16:35.661: E/AndroidRuntime(7634): Caused by: java.lang.NullPointerException
03-17 13:16:35.661: E/AndroidRuntime(7634):     at com.example.saber.MyService.startTimer(MyService.java:67)
03-17 13:16:35.661: E/AndroidRuntime(7634):     at com.example.saber.MyService.onStart(MyService.java:86)
03-17 13:16:35.661: E/AndroidRuntime(7634):     at android.app.Service.onStartCommand(Service.java:438)
03-17 13:16:35.661: E/AndroidRuntime(7634):     at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2370)
03-17 13:16:35.661: E/AndroidRuntime(7634):     ... 10 more

タイマーをどこに追加すると思いますか?

4

1 に答える 1

1

あなたはaが何であるかを学ぶ必要がありNullPointerExceptionます。これは、であるオブジェクトのメソッドを呼び出そうとしていることを意味しますnull

リストしたスタックトレースは、のメソッドで、NullPointerExceptionの行番号67にあることを示しています。MyService.javastartTimer()MyService

コードの行数を数えると、の行番号67が次の行であることがわかると思いますMyService.java

timer.scheduleAtFixedRate(updateProfile, 0, 60*1000);

それが実際に例外を引き起こしている行である場合、それはあなたがNullPointerException理由timerを取得していることを意味しますnull。データメンバーを初期化するコードを示していないのでtimer、これは確かに可能です。

行番号67が上記で引用した行ではない場合は、行67で何が発生する可能性があるかを判断する必要がありますnull。これは、その行でメソッドを呼び出すオブジェクトになることに注意してください。

また、他の人が指摘しているように、Javaでオブジェクトを比較する方法を学ぶ必要があります。オブジェクトの同等性ではなく、オブジェクトのアイデンティティ!=を比較しています。

于 2013-03-17T18:13:02.440 に答える