2016-10-02 16 views
0

こんにちは私のアプリはデータベースからのリアルタイムデータが必要です。私はTextViewに投稿しており、TextViewをデータベースアップデートとしてアップデートすることはできません。私はTimerを使ってみましたが、それはまだ同じです。ここでAndroidスタジオアップデートtextview 5秒ごと

これは、あなたが以下れるべきロジックです、私はCars.renterLatCars.renterLngを取得する場所

public void startTimer() { 
    //set a new Timer 
    timer = new Timer(); 

    //initialize the TimerTask's job 
    initializeTimerTask(); 

    timer.schedule(timerTask, 0, 5000); 
} 

private void stopTimerTask() { 
    //stop the timer, if it's not already null 
    if (timer != null) { 
     timer.cancel(); 
     timer = null; 
    } 
} 

public void initializeTimerTask() { 
    timerTask = new TimerTask() { 
     public void run() { 
      runOnUiThread(new Runnable() { 
       @Override 
       public void run() { 
        final AcceptCars Cars = (AcceptCars) getIntent().getSerializableExtra("cars"); 
        renterLat.setText(Cars.renterLat); 
        renterLng.setText(Cars.renterLng); 
        Log.d(TAG,renterLat.getText().toString()); 
        Log.d(TAG,renterLng.getText().toString()); 
       } 
      }); 
     } 
    }; 
} 

そして、ここでは、私のコードです

public class AcceptCars implements Serializable { 

    @SerializedName("renterLat") 
    public String renterLat; 

    @SerializedName("renterLng") 
    public String renterLng; 

} 
+0

更新テキストは内部でなければなりませんリンクです** runOnUiThread ** – Saveen

+0

はい行うと、あなたはまだ – Saveen

+0

@Saveenを任意の問題を抱えているなら、私に知らせてください - 私はから値を変更したときに、それはまだのTextViewを更新していませんデータベース担当ログ上でさえ... –

答えて

0

。私はTimerの代わりにHandlerを使用しました。 runメソッドの内部では、Webサービスを呼び出してdbから更新された値を取得する必要があります。 runOnUiThreadを使用して、ThreadからUIの値を更新します。

以下のコードを参照してください、

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

    Handler taskHandler = new Handler(); 
    taskHandler.postDelayed(myTask, 0); 
} 

private Runnable myTask = new Runnable(){ 
     public void run() { 

      queryDb(); 

      // repeat the task 
      taskHandler.postDelayed(this, 1000); 
     } 
}; 

private void queryDb(){ 
    new Thread(new Runnable() { 
     @Override 
     public void run() { 

      // call you webservice 
      String data = callWebservice(); 

      // parse the data in to AcceptCars pojo class 
      AcceptCars Cars = parseData(data); 

      //update the UI 
      runOnUiThread(new Runnable() { 
       @Override 
       public void run() { 
        renterLat.setText(Cars.renterLat); 
        renterLng.setText(Cars.renterLng); 
       } 
      }); 
     } 
    }).start(); 
} 
0

TimerTask sがIMOに対処するためには本当に難しいです。一定の時間が経過した後に何かを行うには、Handlerを使用し、postDelayedに電話する必要があります。使用して本当に簡単です

import android.os.Handler; 

public class Timer { 
    private Handler handler; 
    private boolean paused; 

    private int interval; 

    private Runnable task = new Runnable() { 
     @Override 
     public void run() { 
      if (!paused) { 
       runnable.run(); 
       Timer.this.handler.postDelayed (this, interval); 
      } 
     } 
    }; 

    private Runnable runnable; 

    public int getInterval() { 
     return interval; 
    } 

    public void setInterval(int interval) { 
     this.interval = interval; 
    } 

    public void startTimer() { 
     paused = false; 
     handler.postDelayed (task, interval); 
    } 

    public void stopTimer() { 
     paused = true; 
    } 

    public Timer (Runnable runnable, int interval, boolean started) { 
     handler = new Handler(); 
     this.runnable = runnable; 
     this.interval = interval; 
     if (started) 
      startTimer(); 
    } 
} 

また、あなたは私が書いたこのタイマークラスを試してみることができます。

あなたはこのようにそれを使用することができます:

Timer timer = new Timer(new Runnable() { 
    public void run() { 
     runOnUiThread(new Runnable() { 
      @Override 
      public void run() { 
       final AcceptCars Cars = (AcceptCars) getIntent().getSerializableExtra("cars"); 
       renterLat.setText(Cars.renterLat); 
       renterLng.setText(Cars.renterLng); 
       Log.d(TAG,renterLat.getText().toString()); 
       Log.d(TAG,renterLng.getText().toString()); 
      } 
     } 
    } 
}, 5000, true); 
関連する問題