Здравствуйте, дело вот в чём, я хочу в приложении после нажатия на кнопку высвечивать текущее время с точностью до секунд, делаю я это путём потока, в котором каждую секунду получается текущее время и ставится в TextView. Вроде бы всё хорошо, но после первой установки, когда время обновляется во второй раз, приложение вылетает с ошибкой android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
Вот код xml:
<?xml version="1.0" encoding="utf-8"?>
<androidx.appcompat.widget.LinearLayoutCompat xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:orientation="vertical"
android:layout_marginLeft="150dp"
tools:context=".MainActivity">
<TextView
android:id="@+id/label2"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<Button
android:id="@+id/but"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="125dp"
android:text="Погнали!"
android:onClick="butpress"/>
</androidx.appcompat.widget.LinearLayoutCompat>
А вот MainActivity:
public class MainActivity extends AppCompatActivity {
TextView label;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
label = (TextView) findViewById(R.id.label2);
}
public void butpress(View view){
ButPres nm = new ButPres();
nm.actionPerformed();
}
class ButPres extends Thread{
public void actionPerformed() {
start();
}
boolean prov = true;
@Override
public void run() {
while (prov) {
String time = new SimpleDateFormat("kk:mm:ss").format(Calendar.getInstance().getTime());
label.setText(time);
try {
Thread.sleep(1000);
} catch (Exception e) {
System.out.println(e);
}
}
}
}
}