J'essaie d'arrêter une minuterie à partir d'un thread qui commence le compte. Quand j'appuie sur le bouton « START » tout va bien, mais pour le moment j'appuie sur le bouton « Stop » je reçois l'erreur suivante:Arrêt de la minuterie simple avec une bande de roulement
FATAL EXCEPTION: main Process: com.example.user.a4_1_basic_handler, PID: 20375 java.lang.IllegalStateException: Could not execute method for android:onClick
Je suis novice en la matière, je suis juste en train de mettre en pratique fil en utilisant gestionnaire. Si quelqu'un peut me dire comment terminer le fil qui sera un plus :)
package com.example.user.a4_1_basic_handler;
import android.os.Handler;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
//Java variables
int num =0;
boolean stopThread=false;
//Android variables
static final String S_TAG=MainActivity.class.getSimpleName();
Handler handler;
Thread counter = new Thread(new tstart());
tstart test;
// UI
TextView textView;
Button start_button;
Button stop_button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.i(S_TAG,"OnCreate Thread ID: "+Thread.currentThread().getId());
handler = new Handler(getApplicationContext().getMainLooper());
tstart test;
textView=(TextView) findViewById(R.id.textView);
start_button=(Button) findViewById(R.id.start_button);
stop_button=(Button) findViewById(R.id.stop_button);
}
//UI
public void OnClick_start(View view){
counter.start();
}
public void OnClick_stop(View view){
test.finish();
}
//Methods
public void timer(){
num++;
textView.setText(String.valueOf(num));
}
public void clock(){
try {Thread.sleep(1000);}
catch (InterruptedException e) {e.printStackTrace();}
}
//Thread
class tstart extends Thread{
@Override
public void run() {
while (!stopThread) {
clock();
textView.post(new Runnable() {
@Override
public void run() {
timer();
}
});
}
}
public void finish(){
stopThread=true;
}
}
}
Merci beaucoup! J'utiliserai les librairies dont vous parlez plus tard. Maintenant, j'essaie de comprendre pleinement les discussions avec des exercices factices. –
vous avez déclaré 'tstart test;' globalement et localement dans la méthode 'onCreate()' mais jamais initialisé et commencez à utiliser cette référence dans la méthode 'OnClick_stop'. – Aryan