2016-10-02 5 views
0

Hallo meine App benötigt eine Echtzeit-Daten aus der Datenbank und ich poste es auf meinem TextView und ich kann nicht aktualisieren TextView als Datenbank-Updates. Ich habe versucht, Timer, aber es ist immer noch das gleiche. HierAndroid Studio Update Textansicht alle 5 Sekunden

ist mein Code,

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()); 
       } 
      }); 
     } 
    }; 
} 

Und hier ist, wo ich die Cars.renterLat und Cars.renterLng bekommen,

public class AcceptCars implements Serializable { 

    @SerializedName("renterLat") 
    public String renterLat; 

    @SerializedName("renterLng") 
    public String renterLng; 

} 
+0

Aktualisierung Text in sein sollte ** ** runOnUiThread – Saveen

+0

ja, bitte tun und lassen Sie mich wissen, wenn Sie noch kein Problem – Saveen

+0

@Saveen haben - es ist noch nicht das Textview zu aktualisieren, wenn ich den Wert aus der verändert Datenbank Herr. Auch auf dem Log ... –

Antwort

0

Dies ist die Logik, die Sie folgenden werden soll. Ich habe eine Handler anstelle einer Timer verwendet. Innerhalb der run Methode müssen Sie Ihren Webservice aufrufen und den aktualisierten Wert von der Datenbank abrufen. Verwenden Sie runOnUiThread, um den Wert für die Benutzeroberfläche von Thread zu aktualisieren.

Sehen Sie den Code unten,

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 sind wirklich schwer mit der IMO zu beschäftigen. Sie sollten eine Handler verwenden und postDelayed anrufen, um etwas nach einer gewissen Zeit zu tun.

Alternativ können Sie diesen Timer Klasse ausprobieren schrieb ich:

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(); 
    } 
} 

Es ist wirklich einfach zu bedienen ist.

Sie können es wie folgt verwenden:

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);