问题描述
我有一个ActivityNonetwork.java
活动。该文件的目的是当没有网络/互联网时,显示ActivityNonetwork
活动。
我尝试了一下,我关闭了互联网,并显示了此页面(成功!!!),但是当我再次打开互联网时,该页面没有刷新,即使我打开了该页面也显示了同一页面上网。
我的ActivityNonetwork.java
代码:
package com.Notely.SplashScreenandAccounts;
import androidx.activity.OnBackPressedCallback;
import androidx.activity.OnBackPressedDispatcherOwner;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Context;
import android.content.Intent;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import com.Notely.Notes.ActivityDashboard;
public class ActivityNonetwork extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_nonetwork);
final Button exit = findViewById(R.id.exit);
final Button retry = findViewById(R.id.retry);
exit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
exitApp();
}
});
retry.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
retryApp();
}
});
if (checkNetwork() == true) {
finish();
overridePendingTransition(0,0);
startActivity(getIntent());
overridePendingTransition(0,0);
Intent activitySplash = new Intent(this,ActivitySplash.class);
startActivity(activitySplash);
}
}
private boolean checkNetwork() {
ConnectivityManager connectivityManager
= (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
return activeNetworkInfo != null && activeNetworkInfo.isConnected();
}
public void exitApp() {
Intent exitApp = new Intent(Intent.ACTION_MAIN);
exitApp.addCategory( Intent.CATEGORY_HOME );
exitApp.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(exitApp);
}
public void retryApp() {
Intent retryApp = new Intent(this,ActivitySplash.class);
startActivity(retryApp);
}
@Override
public void onBackPressed() {
super.onBackPressed();
Intent exitApp = new Intent(Intent.ACTION_MAIN);
exitApp.addCategory( Intent.CATEGORY_HOME );
exitApp.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(exitApp);
}
}
当互联网来临时,有什么方法可以刷新页面?
解决方法
创建活动后,您只需检查网络连接, 您必须初始化观察者以进行网络更改
阅读此article并管理您的网络连接
,您可以在项目中使用广播接收器来实现
按如下所示创建一个类-
Gazetteer.query.get(1).terms
然后在课程下创建-
x[which(SSasymp(log10(x),yf,y0,log_alpha) == 0.1)]
创建PrefsManager类-为此功能创建单独的类不是强制性的。您可以将此代码添加到MainActivity。
client.on('guildMemberAdd',member => {
const channel = member.guild.channels.cache.find(ch => ch.name === 'welcome');
if (!channel) return;
channel.send(`Welcome to the community,${member}!`);
});
在MainActivity中
public class NetworkChangeReceiver extends BroadcastReceiver {
@Override
public void onReceive(final Context context,final Intent intent) {
PrefManager.getInstance(context).setPreviousNetworkStatus
(NetworkUtil.getConnectivityStatusString(context));
}
}
在onCreate方法注册接收器中
class NetworkUtil {
private static int TYPE_WIFI = 1;
private static int TYPE_MOBILE = 2;
private static int TYPE_NOT_CONNECTED = 0;
private static int getConnectivityStatus(Context context) {
ConnectivityManager cm = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
if (null != activeNetwork) {
if (activeNetwork.getType() == ConnectivityManager.TYPE_WIFI)
return TYPE_WIFI;
if (activeNetwork.getType() == ConnectivityManager.TYPE_MOBILE)
return TYPE_MOBILE;
}
return TYPE_NOT_CONNECTED;
}
static String getConnectivityStatusString(Context context) {
int conn = NetworkUtil.getConnectivityStatus(context);
String status = null;
if (conn == NetworkUtil.TYPE_WIFI) {
status = context.getString(R.string.wifi_enabled);
} else if (conn == NetworkUtil.TYPE_MOBILE) {
status = context.getString(R.string.mobile_data_enable);
} else if (conn == NetworkUtil.TYPE_NOT_CONNECTED) {
status = context.getString(R.string.not_connected_to_internet);
}
return status;
}
}
覆盖以下方法
public class PrefManager {
public static final String PREVIOUS_NETWORK_STATE = "previous_network_state";
private static SharedPreferences sharedPreferences;
private static PrefManager prefManager;
private PrefManager(Context context) {
sharedPreferences = context.getSharedPreferences(PREFERENCE_NAME,Context.MODE_PRIVATE);
}
public static PrefManager getInstance(Context context) {
if (prefManager == null) {
prefManager = new PrefManager(context);
}
return prefManager;
}
public SharedPreferences getSharedPreferences() {
return sharedPreferences;
}
public void setPreviousNetworkStatus(String status) {
sharedPreferences.edit().putString(PREVIOUS_NETWORK_STATE,status).apply();
}
public String getPreviousNetworkStatus() {
return sharedPreferences.getString(PREVIOUS_NETWORK_STATE,"");
}
}
然后创建此方法-
private NetworkChangeReceiver networkChangeReceiver = NetworkChangeReceiver()
使用onDestroy方法取消注册接收器
registerReceiver(
networkChangeReceiver,IntentFilter("android.net.conn.CONNECTIVITY_CHANGE")
)
我希望这对您有用。