Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/192.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如果internet连接中断,如何继续进行此活动(而不是进行其他活动)?_Android_Android Activity - Fatal编程技术网

Android 如果internet连接中断,如何继续进行此活动(而不是进行其他活动)?

Android 如果internet连接中断,如何继续进行此活动(而不是进行其他活动)?,android,android-activity,Android,Android Activity,我有一个非常常见的问题,我想每个安卓开发人员都会遇到这个问题。我正在制作一个从web服务器加载数据的应用程序。因此,互联网连接正在被使用。但我必须在每次呼叫服务器之前检查互联网连接。我正在使用ConnectivityManager进行这项工作,它可以正常工作 我的问题实际上是在互联网连接丢失时通知用户。我想向用户显示一个AlertDialog(警报)对话框,告诉他internet连接已断开。现在的问题是,如果用户单击一个按钮并且必须启动一个新的活动(这将从服务器加载数据),那么我就无法向他显示调

我有一个非常常见的问题,我想每个安卓开发人员都会遇到这个问题。我正在制作一个从web服务器加载数据的应用程序。因此,互联网连接正在被使用。但我必须在每次呼叫服务器之前检查互联网连接。我正在使用ConnectivityManager进行这项工作,它可以正常工作

我的问题实际上是在互联网连接丢失时通知用户。我想向用户显示一个AlertDialog(警报)对话框,告诉他internet连接已断开。现在的问题是,如果用户单击一个按钮并且必须启动一个新的活动(这将从服务器加载数据),那么我就无法向他显示调用活动的对话框。这里的问题是,如果互联网不可用,我不想导航到其他活动。我只想继续参加这项活动

此活动上有许多按钮,单击这些按钮,用户可以转到不同的活动。我只想在没有互联网的情况下不要打开其他活动,只向他显示有关此活动的对话框。一种方法是检查每个按钮的点击(在onClick方法中),然后通知用户internet连接丢失。但这对我来说可能非常忙碌,因为每个活动都有很多活动和按钮

是否有一种通用而有效的方法来确定此活动是否已结束,新活动是否正在启动,并在找到后向用户显示对话框,而不是在internet不可用的情况下移动到下一个活动。处理此问题的最佳做法是什么。请帮帮我。过去两天我一直在做这件事。提前准备好

 @Override
  public void onClick(View view) {
    switch(view.getId()){
       case R.id.backIcon:
           navigateMenuScreen(view);
           break;
    }
 }
以下是我如何检查互联网连接(并且工作正常):

这是导航方法:

    public void navigateMenuScreen(View view){
    try {           
        Intent loginIntent = new Intent(view.getContext(), MenuActivity.class);      
        startActivityForResult(loginIntent, 0);     
        overridePendingTransition(android.R.anim.slide_in_left, android.R.anim.slide_out_right);        
    } catch(Exception ex) {
    }
}
我的问题是,我是否必须在每种导航方法中检查互联网连接(还有类似于上述方法的其他方法),还是有更好的方法?

注册

   registerReceiver(mConnReceiver, 
       new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));
听着:

  private BroadcastReceiver mConnReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            boolean noConnectivity = intent.getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY, false);
            String reason = intent.getStringExtra(ConnectivityManager.EXTRA_REASON);
                        boolean isFailover = intent.getBooleanExtra(ConnectivityManager.EXTRA_IS_FAILOVER, false);

            NetworkInfo currentNetworkInfo = (NetworkInfo) intent.getParcelableExtra(ConnectivityManager.EXTRA_NETWORK_INFO);
            NetworkInfo otherNetworkInfo = (NetworkInfo) intent.getParcelableExtra(ConnectivityManager.EXTRA_OTHER_NETWORK_INFO);

            // do application-specific task(s) based on the current network state, such 
            // as enabling queuing of HTTP requests when currentNetworkInfo is connected etc.
        }
    };
别忘了你的清单文件

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

寄存器

   registerReceiver(mConnReceiver, 
       new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));
听着:

  private BroadcastReceiver mConnReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            boolean noConnectivity = intent.getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY, false);
            String reason = intent.getStringExtra(ConnectivityManager.EXTRA_REASON);
                        boolean isFailover = intent.getBooleanExtra(ConnectivityManager.EXTRA_IS_FAILOVER, false);

            NetworkInfo currentNetworkInfo = (NetworkInfo) intent.getParcelableExtra(ConnectivityManager.EXTRA_NETWORK_INFO);
            NetworkInfo otherNetworkInfo = (NetworkInfo) intent.getParcelableExtra(ConnectivityManager.EXTRA_OTHER_NETWORK_INFO);

            // do application-specific task(s) based on the current network state, such 
            // as enabling queuing of HTTP requests when currentNetworkInfo is connected etc.
        }
    };
别忘了你的清单文件

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

可能的解决方案(假设您是为Android 3.0+开发的)是使用
AsyncTaskLoader
()。这意味着当用户按下Activity1上的按钮时,您将启动一个“后台”任务来检索您的数据。成功下载数据后,它可以显示
activivty2

这将保证在显示
Activity2
时显示数据,但不能保证立即显示
Activity2
(或者根本不显示,具体取决于您的编写方式)

我不确定这是否是您想要的,但值得一读。

可能的解决方案(假设您是为Android 3.0+开发的)是使用
AsyncTaskLoader
()。这意味着当用户按下Activity1上的按钮时,您将启动一个“后台”任务来检索您的数据。成功下载数据后,它可以显示
activivty2

这将保证在显示
Activity2
时显示数据,但不能保证立即显示
Activity2
(或者根本不显示,具体取决于您的编写方式)


我不确定这是否正是您想要的,但值得一读。

没有代码,我们无能为力。请显示您的代码。另外,请保持简短,您有更好的机会收到答案这里的问题是,如果您对
活动1
执行检查,发现存在连接,然后启动
活动2
,无法保证在
Activity2
开始使用连接时仍有连接。很可能会有,但不确定。@nandeesh:下次我会记住的。@Basic:所以我们没有解决这个问题的可行方案?没有代码我们就无能为力。请显示您的代码。另外,请保持简短,您有更好的机会收到答案这里的问题是,如果您对
活动1
执行检查,发现存在连接,然后启动
活动2
,无法保证在
Activity2
开始使用连接时仍有连接。很可能会有,但不确定。@nandeesh:下次我会记住的。@Basic:所以我们没有一个可行的解决方案来解决这个问题?Thanx伙计。我使用它并在连接丢失时显示警报对话框。所以现在我不必考虑活动渲染。我不让用户做任何事情,如果互联网连接丢失。我只是显示一个带有“重试”按钮的持久对话框。所以用户要么重试,要么在设备设置中查找他的互联网连接。Thanx dude。我使用它并在连接丢失时显示警报对话框。所以现在我不必考虑活动渲染。我不让用户做任何事情,如果互联网连接丢失。我只是显示一个带有“重试”按钮的持久对话框。所以用户要么重试,要么在设备设置中查找其internet连接。