Je suis nouveau dans le développement Android et maintenant mon activité de lanceur ne montre que 5 secondes, puis je veux vérifier si l’utilisateur est connecté ou non et s’effectue.
voici mon code.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
exactPreferences = getSharedPreferences("ExactPreference",MODE_PRIVATE);
setContentView(R.layout.activity_landing_page);
session = exactPreferences.getString(Model.getSingleton().SHARED_SESSION_ID,null);
Log.i("Session Id",session);
displayData(); // I want to perform this function after 5 seconds.
}
private void displayData() {
if(session.equals("")){
Intent loginIntent = new Intent(LandingPage.this,
LoginActivity.class);
startActivity(loginIntent);
Log.i("User Logged In", "False");
}
else
{
Intent objIntent = new Intent(LandingPage.this,
IndexPageActivity.class);
startActivity(objIntent);
Log.i("User Logged In", "True");
}
}
Vous pouvez utiliser le gestionnaire pour ajouter un peu de retard. Appelez la méthode displayData()
comme ci-dessous afin qu'elle soit exécutée après 5 secondes.
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
displayData();
}
}, 5000);
Remarque: N'utilisez pas les threads tels que Thread.sleep(5000);
car cela bloquerait l'interface utilisateur et le rendrait irresponsable.
Assign millisDelayTime variable avec les millisecondes souhaitées pour provoquer un délai. mActivity est un objet de Activity pour fournir un contexte d'application. Dans votre cas millisDelayTime devrait être initialisé avec 5000
mActivity.runOnUiThread(new Runnable() {
@Override
public void run() {
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
//your code here
}
}, millisDelayTime);
}
});
Utiliser un compte à rebours
// There's a TextView txtCount in Main Activity
final int secs = 5;
new CountDownTimer((secs +1) * 1000, 1000) // Wait 5 secs, tick every 1 sec
{
@Override
public final void onTick(final long millisUntilFinished)
{
txtCount.setText("" + (int) (millisUntilFinished * .001f));
}
@Override
public final void onFinish()
{
txtCount.setText("GO!");
finish();
// Time's up - Start the Login Activity
final Intent tnt =
new Intent(getApplicationContext(), LoginActivity.class);
startActivity(tnt);
}
}.start();
Essayez ceci, créez du code CountDownTimer en un clic
timer = new CountDownTimer(5000, 5000)
{
public void onTick(long millisUntilFinished)
{
}
public void onFinish()
{
displayData();
}
};
timer.start();
long delay = 1000;
long period = 50000;
Timer task = new Timer();
task.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
getDriver(sessionManager.getKEY(), ride_id);
}
}, delay, period);
La meilleure option pour y parvenir utilise un Handler :
int TIME = 5000; //5000 ms (5 Seconds)
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
function(); //call function!
}
}, TIME);
Si possible, essayez d'éviter d'utiliser postDelayed. C'est une mauvaise pratique, car il peut perdre la référence aux objets que vous voulez dessiner sur votre écran et générer un NPE. Utilisez plutôt un gestionnaire. Tout d’abord, créez un gestionnaire de variables globales dans lequel vous devrez "manipuler" la logique de votre code. Faites-le en utilisant la fonction handleMessage.
Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
if(msg.what == 1){
// your code here
}
}
};
Ensuite, où que vous souhaitiez l'exécuter, appelez simplement la fonction:
// 1 is the ID of your process
handler.sendEmptyMessageDelayed(1, 5000);
Rappelez-vous que dans la méthode onDestroyView (dans un fragment) ou dans la méthode onDestroy (dans une activité), vous devrez appeler
handler.removeMessages(1)