2011-06-20 2 views
0

誰でも私をここで助けることができますか?私は間違ってsoimethingをやっていると私は自分自身を理解するように見えることはできません。基本的にdoInBackground()メソッドが実行されていません。AsyncTaskが実行されていません

ですWHE全体のクラスファイルとそれを呼び出すコードの行

コール:

new MyTimer().execute(); 

ファイル:

public class MyTimer extends AsyncTask<Object, Object, Object> { 

Timer _timerTask = new Timer(); 
static int totalSeconds = 1, hour = 0, min = 0, sec = 0; 
static String mTimeFormat = "%02d:%02d:%02d"; 
static String timeTakenString; 

@Override 
protected Object doInBackground(Object... params) { 

     TimerTask timer = new TimerTask() { 
      @Override 
      public void run() { 

       GPSMain.printscreen(); 
       totalSeconds += 1; 
       sec += 1; 
       if(sec >= 60) { 
        sec = 0; 
        min += 1; 
        if (min >= 60) { 
         min = 0; 
         hour += 1; 
        } 
       } 
       timeTakenString = String.format(mTimeFormat, hour, min, sec); 
       onPostExecute(timeTakenString); 

      } 
     }; 
     (_timerTask).scheduleAtFixedRate(timer,1000,1000); 
     return timeTakenString; 


} 
protected void onPostExecute(String timeTaken) { 
    GPSMain.timer.setText("Time Taken: "+timeTaken); 
} 
} 

EDIT 1:

Logcat:

06-20 10:18:20.036: DEBUG/AndroidRuntime(312): >>>>>>>>>>>>>> AndroidRuntime START <<<<<<<<<<<<<< 
06-20 10:18:20.046: DEBUG/AndroidRuntime(312): CheckJNI is ON 
06-20 10:18:20.225: DEBUG/AndroidRuntime(312): --- registering native functions --- 
06-20 10:18:20.506: DEBUG/ddm-heap(312): Got feature list request 
06-20 10:18:20.865: INFO/ActivityManager(52): Starting activity: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 cmp=Hartford.gps/.GPSMain } 
06-20 10:18:20.925: DEBUG/AndroidRuntime(312): Shutting down VM 
06-20 10:18:20.944: DEBUG/dalvikvm(312): DestroyJavaVM waiting for non-daemon threads to exit 
06-20 10:18:20.944: DEBUG/dalvikvm(312): DestroyJavaVM shutting VM down 
06-20 10:18:20.944: DEBUG/dalvikvm(312): HeapWorker thread shutting down 
06-20 10:18:20.944: DEBUG/dalvikvm(312): HeapWorker thread has shut down 
06-20 10:18:20.976: DEBUG/jdwp(312): JDWP shutting down net... 
06-20 10:18:20.976: INFO/dalvikvm(312): Debugger has detached; object registry had 1 entries 
06-20 10:18:20.985: ERROR/AndroidRuntime(312): ERROR: thread attach failed 
06-20 10:18:20.985: DEBUG/dalvikvm(312): VM cleaning up 
06-20 10:18:21.175: DEBUG/dalvikvm(312): LinearAlloc 0x0 used 638596 of 5242880 (12%) 
06-20 10:18:21.495: INFO/ActivityManager(52): Displayed activity Hartford.gps/.GPSMain: 604 ms (total 24251 ms) 
06-20 10:18:23.365: INFO/NotificationService(52): enqueueToast pkg=Hartford.gps [email protected] duration=1 
06-20 10:18:23.545: DEBUG/GpsLocationProvider(52): setMinTime 250 
06-20 10:18:23.545: DEBUG/GpsLocationProvider(52): startNavigating 
06-20 10:18:24.206: DEBUG/LocationManager(287): removeUpdates: listener = [email protected] 
06-20 10:18:24.206: DEBUG/GpsLocationProvider(52): stopNavigating 
06-20 10:18:26.146: WARN/KeyCharacterMap(287): No keyboard for id 0 
06-20 10:18:26.146: WARN/KeyCharacterMap(287): Using default keymap: /system/usr/keychars/qwerty.kcm.bin 
06-20 10:18:26.616: WARN/IInputConnectionWrapper(97): showStatusIcon on inactive InputConnection 
+0

log catのエラーはありますか? – Flo

+0

プロジェクトをフル稼働させるためのLogcarの読み取りを追加しました – Ian

答えて

1

はこれを試してください。..

パブリッククラスMyAsyncTaskアクティビティ{

public static TextView timer; 
private MyTimer asyncTask; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    asyncTask = (MyTimer) new MyTimer().execute(); 
    timer = (TextView) findViewById(R.id.text); 

} 

public class MyTimer extends AsyncTask<String, Object, String> { 

    Timer _timerTask = new Timer(); 
    int totalSeconds = 1; 
    int hour = 0; 
    int min = 0; 
    int sec = 0; 
    final String mTimeFormat = "%02d:%02d:%02d"; 
    String timeTakenString; 
    private String timeTaken; 
    @Override 
    protected String doInBackground(String... params) { 

     TimerTask timer = new TimerTask() { 
      @Override 
      public void run() { 

       MyAsyncTask.printscreen(); 
       totalSeconds += 1; 
       sec += 1; 
       if (sec >= 60) { 
        sec = 0; 
        min += 1; 
        if (min >= 60) { 
         min = 0; 
         hour += 1; 
        } 
       } 
       timeTakenString = String 
         .format(mTimeFormat, hour, min, sec); 
       onPostExecute(timeTakenString); 

      } 
     }; 
     (_timerTask).scheduleAtFixedRate(timer, 1000, 1000); 
     return timeTakenString; 

    } 

    protected void onPostExecute(String timeTaken) { 
     this.timeTaken = timeTaken; 
     Message message = new Message(); 
     message.what = 100; 
     mHandler.sendMessage(message); 
    } 

    Handler mHandler = new Handler() { 


     public void handleMessage(Message msg) { 
      if (msg.what == 100) { 

       timer.setText("Time Taken: " + timeTaken); 
      } 
     }; 
    }; 
} 

protected static void printscreen() { 
    // TODO Auto-generated method stub 

} 

}

+0

私はこれを私のプログラマーに適合させるのに大変手応えがありました。 – Ian

1

を拡張あなたがスレッドでスレッドを起動(タイマーがスレッドである)、それが問題です。 繰り返しコードが必要です。 AsyncTaskなしでTimerを使用するのはなぜですか?それは別のスレッドであり、UIをハングしません。もちろん、UIスレッドではなく別のUIからUIを更新することはできないため、UIを更新するにはHandlerオブジェクトが必要です。あなたが背景中のTextViewの変更テキストのためonProgressUpdateを使用することができます

Timer _timerTask = new Timer(); 
    TimerTask timer = new TimerTask() { 
     @Override 
     public void run() { 
      postExecute.sendEmptyMessage(0); //first UI update    
      totalSeconds += 1; 
      sec += 1; 
      if(sec >= 60) { 
       sec = 0; 
       min += 1; 
       if (min >= 60) { 
        min = 0; 
        hour += 1; 
       } 
      } 
      timeTakenString = String.format(mTimeFormat, hour, min, sec); 
      postExecute.sendEmptyMessage(1); //second UI update 
     } 
     private Handler postExecute = new Handler(){ 
      @Override 
      public void dispatchMessage(Message msg) { 
       super.dispatchMessage(msg); 
       if(msg.what == 0) 
        GPSMain.printscreen(); 
       else if(msg.what == 1) 
        GPSMain.timer.setText("Time Taken: "+timeTaken); 
      } 
     }; 
    }; 
    _timerTask.scheduleAtFixedRate(timer,1000,1000); 
+0

私はこのコードを試して、現在は "run()"メソッドを実行しています。私はトーストメッセージを "be to the line" TimerTask timer =新しいTimerTask(){"が表示され、" run() "メソッドのコードの最初の行が表示されません。 – Ian

+0

@lan別のスレッドでUIを更新することはできません(ToastはUIアップデートです)。あなたはUIスレッドでそれを行う必要があります。 – Olsavage

1

..

@Override 
     protected void onProgressUpdate(String... values) 
     { 
      GPSMain.timer.setText("Time Taken: "+values[0]); 
      super.onProgressUpdate(values); 
     } 

をしてdoinBackground方法でこのpublishProgress(timeTakenString)と呼ばれるこのような 何か作業をする必要があります。

の詳細については、click here

関連する問題