检查互联网连接和显示互联网连接错误使用片段(底部表)

问题描述:

我想检查互联网连接上的活动在android中。我有一个`ConnectivityReceiver'类,它返回网络的当前状态,并返回捕获网络变化时的状态。检查互联网连接和显示互联网连接错误使用片段(底部表)

我在activity上使用这个类的方法。我想要的是,只要方法返回没有互联网连接,BottomSheetDialogFragment应显示'重试'button。在按button时,Bottom Sheets dialog必须关闭,activity需要重新开始,并且应该再次检查互联网。基本上,每次我关闭Bottom Sheets dialog后,它应该检查互联网。

互联网连接类工作正常,我检查了它使用日志,它每次检查Network State是否有。问题出在dialog。每次关闭dialog时,它都会在不检查互联网的情况下恢复activity

NoInternetConnectivity.java - 扩展'BottomSheetDialogFragment'类的类。

MainActivity.java

public class MainActivity extends AppCompatActivity{ 
    final BottomSheetDialogFragment internetConnectivitySheet = NoInternetConnectivity 
      .newInstance("New Internet Connectivity Bottom Sheet"); 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     // Manually checking internet connection 
     checkConnection(); 
    } 

    /** 
    * Method to check connection on activity resume 
    */ 
    @Override 
    protected void onResume(){ 
     Log.d(LOG_TAG, "onResume()"); 
     MyApplication.getInstance().setConnectivityListener(this); 
     checkConnection(); 
     super.onResume(); 
    } 

    /** 
    * Method to check internet connection in activity. 
    */ 
    private void checkConnection() { 
     Log.d("Check Connection called", "CHECKING CONNECTION..."); 
     if(!internetConnectivitySheet.isAdded() && !ConnectivityReceiver.isConnected()){ 
      internetConnectivitySheet.show(getSupportFragmentManager(), 
        internetConnectivitySheet.getTag()); 
     } else if (internetConnectivitySheet.isAdded()) { 
      internetConnectivitySheet.dismiss(); 
     } else { 
      //internet is connected :-) 
     } 
    } 

    /** 
    * Callback will be triggered when there is change in 
    * network connection 
    */ 
    @Override 
    public void onNetworkConnectionChanged(boolean isConnected) { 
     Log.d("On Network Change Called", "CHECKING CONNECTION..."); 
     if(!internetConnectivitySheet.isAdded() && !isConnected){ 
      internetConnectivitySheet.show(getSupportFragmentManager(), 
        internetConnectivitySheet.getTag()); 
     } else if (internetConnectivitySheet.isVisible()) { 
      internetConnectivitySheet.dismiss(); 
     } else { 
      //internet is connected :-) 
     } 
    }  
} 

在检查日志,当我关闭dialog,活动没有得到恢复。发生了什么,以及如何解决这个问题?

+1

你的活动不应该被暂停后致电检查一个新的片段。因此,当你删除你的片段时,你不应该得到onResume。 – Distwo

+1

您需要通过设置BottomSheetBehavior.BottomSheetCallback并在此时调用checkConnection()来检测底部表单对话状态何时发生更改。 – Distwo

+0

@Distwo是的,我明白了。我没有收到活动恢复的日志,所以我相信活动不会恢复,这就是发生这种情况的原因。你能帮助你怎么做你说的吗? –

如果你想在你的活动中拥有暂停/恢复流程,你可以创建一个自定义对话框而不是片段,我认为这是一个干净的解决方案。有它很多帖子How to create a Custom Dialog box in android? https://developer.android.com/guide/topics/ui/dialogs.html

但是,如果你想保持目前的实现,你只需要添加时需要解聘片段

public void onNetworkConnectionChanged(boolean isConnected) { 
//... 
    } else if (internetConnectivitySheet.isVisible()) { 
     internetConnectivitySheet.dismiss(); 
    checkConnection(); 
    } else { 
//.... 
}