1

アクティビティ内の変数を 1 秒ごとに更新したいので、そのために Async タスクとその中で実行可能ファイルを使用しています。「別のメソッドで定義された内部クラス内の非最終変数 myRunnable を参照できません」というこのエラーが表示され続けます。宣言を final に変更すると、「ローカル変数 myRunnable が初期化されていない可能性があります」と表示されます。エラーを修正するにはどうすればよいですか? 私がやりたいことをするより良い方法はありますか?

    import android.os.AsyncTask;
    import android.os.Handler;

    public class Timer extends AsyncTask<String, Process, Void>{
static int seconds=0;
TimerTask timer;
static int minutes=0;
static int hours=0;
private String timeTaken;
public Handler myhandler = new Handler();

@Override
protected Void doInBackground(String... params) {

   final Runnable myRunnable = new Runnable() {

@Override
public void run() {
    ......
......
    ...... 
myhandler.postDelayed(myRunnable, 1000);
}
};

    return null;
}   
4

1 に答える 1

0

AsyncTask を使用する代わりに、このようなことはどうですか (ただし、AsyncTask 内で同様のことを行うことができます。別のスレッドで実行されるため、Runnable 全体を実行する代わりに、Thread.sleep(...) を使用してこのワーカー スレッドを単純にブロックできます)。もの...

private myhandler = new Handler();
private boolean periodicCallsEnabled=false;

public boolean isPeriodicUpdatingEnabled(){
    return periodicCallsEnabled;
}

public void startPeriodicUpdates(){ //CALL THIS IN ORDER TO START THE PERIODIC UPDATES
    periodicCallsEnabled=true;
    periodicCall();
}

public void stopPeriodicUpdates(){ //CALL THIS TO STOP THEM
    periodicCallsEnabled=false;
    myhandler.removeCallbacksAndMessages(null);
}


void periodicCall(){
    if(periodicCallsEnabled){

        //INSERT CUSTOM CODE HERE TO BE EXECUTED EVERY SECOND
        // ......

        myhandler.postDelayed(new Runnable(){
            public void run(){
                periodicCall();
            }
        },1000);
    }
}
于 2012-04-23T03:09:50.877 に答える