"无internet连接警报"对话框.NetworkCallback已注销错误



我正试图在我的应用程序上创建一个无互联网连接警报对话框,它可以工作,但之后应用程序崩溃。

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
}

最新更新