我正在进行一个现场项目.当用户点击应用程序时.出现欢迎屏幕(该屏幕上有一个网络视图).如果互联网未连接,则应用程序崩溃.基本上,我的问题是以编程方式检查移动设备是否连接到互联网.如果没有,则不要将数据从webservice获取到webview,并显示一个对话框,显示“检查您的互联网连接”
在进行研究的同时,我发现了许多事情,我已经尝试实现了这一点.但是,它不符合我的要求
我的代码是
- public boolean isOnline() {
- ConnectivityManager cm =
- (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
- NetworkInfo netInfo = cm.getActiveNetworkInfo();
- if (netInfo != null && netInfo.isConnectedOrConnecting()) {
- return true;
- }
- else
- {
- Description.setVisibility(View.INVISIBLE);
- new AlertDialog.Builder(WelcomePage.this)
- .setTitle(getResources().getString(R.string.app_name))
- .setMessage(
- getResources().getString(
- R.string.internet_error))
- .setPositiveButton("OK",null).show();
- }
- return false;
- }
我在AsyncTask的doInBackground()中调用此函数
请帮忙!
解决方法
你可以结帐这个图书馆:
https://github.com/novoda/merlin
您只需实现可连接,当网络出现故障或出现时您将收到回叫.
因此,您可以在此场景中显示对话框.
您还可以查询库的当前状态,并选择不执行您的网络任务
创建Merlin(使用Merlin.Builder())
- merlin = new Merlin.Builder().withConnectableCallbacks().build(context);
绑定并解除您的活动中的服务
- @Override
- protected void onResume() {
- super.onResume();
- merlin.bind();
- }
- @Override
- protected void onPause() {
- super.onPause();
- merlin.unbind();
- }
注册回调
- merlin.registerConnectable(new Connectable() {
- @Override
- public void onConnect() {
- // Do something!
- }
- });
演示中的MerlinActivity显示了一种从您的主要应用程序代码中消除Merlin的简单方法.