我正试图在我的应用程序上创建一个无互联网连接警报对话框,它可以工作,但之后应用程序崩溃。
java.lang.IollegalArgumentException:NetworkCallback已注销
public class MainActivity extends AppCompatActivity {
private ConnectivityManager mCManager;
private ConnectivityManager.NetworkCallback mCallback;
private AlertDialog mDialog;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mCManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkRequest request = new NetworkRequest.Builder().build();
mCallback = new ConnectivityManager.NetworkCallback() {
@Override
public void onLost(Network network) {
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this, R.style.Theme_AppCompat_Dialog_Alert)
.setTitle("Oops!... No Internet Connection")
.setMessage("Check your WIFI or your Mobile Data")
.setPositiveButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
finishAndRemoveTask();
}
});
mDialog = builder.show();
}
@Override
public void onAvailable(Network network) {
if (mDialog != null) {
mDialog.dismiss();
}
}
};
mCManager.registerNetworkCallback(request, mCallback);
}
@Override
public void onStop() {
mCManager.unregisterNetworkCallback(mCallback);
super.onStop();
}
}
我在我的应用程序清单中声明了这一点,如下所示。
<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" />
您的问题是在onCreate
中添加它,但在onStop
中删除它。添加/删除侦听器应该在匹配方法中完成:
onCreate
/onDestroy
onStart
/onStop
onResume
/onPause
由于您只想在用户打开应用程序时显示,因此可能需要在onStart
中注册,然后在onStop
中注销。只需确保检查是否也要在onStart
中初始显示它。
只需添加这样的try-catch即可忽略异常:
try {
mCManager.unregisterNetworkCallback(mCallback);
} catch(Exception e) {
// ignore
}