Я пытался добавить таймер к приложению, которое у меня есть, которое проверяет наличие inte rnet каждые 3 секунды, чтобы переключиться на второй xml файл при разрыве соединения, но выдает ошибку каждый раз. сообщение об ошибке:
E/AndroidRuntime: FATAL EXCEPTION: Timer-0
Process: com.example.friends, PID: 2221
android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
at android.view.ViewRootImpl.checkThread(ViewRootImpl.java:8530)
at android.view.ViewRootImpl.requestLayout(ViewRootImpl.java:1432)
at android.view.View.requestLayout(View.java:23224)
at android.view.View.requestLayout(View.java:23224)
at android.view.View.requestLayout(View.java:23224)
at android.view.View.requestLayout(View.java:23224)
at android.view.View.requestLayout(View.java:23224)
at android.view.ViewGroup.removeAllViews(ViewGroup.java:5587)
at androidx.appcompat.app.AppCompatDelegateImpl.setContentView(AppCompatDelegateImpl.java:554)
at androidx.appcompat.app.AppCompatActivity.setContentView(AppCompatActivity.java:161)
at com.example.friends.MainActivity$2.run(MainActivity.java:51)
at java.util.TimerThread.mainLoop(Timer.java:555)
at java.util.TimerThread.run(Timer.java:505)
это основное действие xml:
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:id="@+id/textView17"
android:layout_width="404dp"
android:layout_height="196dp"
android:layout_marginStart="4dp"
android:layout_marginTop="37dp"
android:layout_marginEnd="4dp"
android:layout_marginBottom="118dp"
android:text="Hello world"
android:textColor="#020202"
android:textSize="24sp"
app:layout_constraintBottom_toTopOf="@+id/textView18"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/textView18"
android:layout_width="410dp"
android:layout_height="71dp"
android:layout_marginBottom="197dp"
android:text="welcom to java"
android:textColor="#000000"
android:textSize="24sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView17" />
</androidx.constraintlayout.widget.ConstraintLayout>
Когда inte rnet недоступен, я хочу перейти к этому XML :
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/textView8"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginBottom="30dp"
android:text="Looks like your connection is broken!"
android:textSize="24sp"
</androidx.constraintlayout.widget.ConstraintLayout>
и это класс MainActivity:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Timer timer = new Timer() ;
timer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
if(!Internet_Class.isConnected(getApplicationContext())){
setContentView(R.layout.no_internet_connection) ;
}
else{
setContentView(R.layout.activity_main) ;
}
}
}, 0, 3000);
}
}
и есть класс, который я назвал (Internet_Class), вот код:
public class Internet_Class {
public static boolean isConnected(Context context){
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo info = cm.getActiveNetworkInfo() ;
return (info != null && info.isConnected()) ;
}
}
и манифесты:
<?xml version="1.0" encoding="utf-8"?>
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".app_information"></activity>
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
Ошибка в том, что приложение перестает работать каждый раз через три секунды. Кто-нибудь знает, где ошибка или какое-либо предложение?