Bonjour,
le programme ANDROID ci dessous fonctionne bien si je ne demande pas l'écriture du WIDGET type VIEW label.
le Log.i affiche bien Message 1,Message 2, Message 3, etc toute les 4 secondes
si je demande l'ecriture du label, le runnable "Affichage" s'arrête après avoir affiché "test ecriture" 1 fois dans le label.
comment faire pour maintenir l'activité du Thread toute les 4 seconde ?
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;
public class TestBipActivity extends Activity {
/** Called when the activity is first created. */
private static final String TAG = "Test";
public TextView label;
public int i=0;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
label = (TextView) findViewById(R.id.label);
ScheduledExecutorService execute = Executors.newSingleThreadScheduledExecutor();
//Execute MonRunnable toutes les secondes
execute.scheduleAtFixedRate(new Affichage(), 0, 4, TimeUnit.SECONDS);
}
//public void pourLectureMessages() {
public class Affichage implements Runnable {
@Override
public void run(){
Log.i(TAG, "Message : " + i);
label.setText("test écriture : " + i );
i++;
}
}
J'ai fini par trouver la solution qui était dans le "handler"
package com.test.android.com;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.widget.TextView;
public class TestBipActivity extends Activity {
/** Called when the activity is first created. */
private static final String TAG = "Test";
public TextView label;
public int i = 0;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
label = (TextView) findViewById(R.id.label);
ScheduledExecutorService execute = Executors
.newSingleThreadScheduledExecutor();
// Execute MonRunnable toutes les secondes
execute.scheduleAtFixedRate(new Affichage(), 0, 4, TimeUnit.SECONDS);
}
// public void pourLectureMessages() {
public class Affichage implements Runnable {
@Override
public void run() {
Log.e(TAG, "Message : " + i);
// label.setText("test écriture : " + i );
i++;
handler.sendEmptyMessage(0);
}
}
private Handler handler = new Handler() {
public void handleMessage(android.os.Message msg) {
if (msg.what == 0) {
label.setText("test écriture : " + i);
}
};
};
}
[Android] scheduleAtFixedRate
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.