【问题标题】:Where is the best place to check for internet connection in MVVM?在 MVVM 中检查 Internet 连接的最佳位置在哪里?
【发布时间】:2017-12-07 16:13:30
【问题描述】:

我有一个apiClass,它可以进行所有网络调用 我在想我的选择是:

  1. 检查activity/fragment

  2. apiClient 类中进行检查

我相信还有更好的选择。

编辑

This 回答建议我的第二个选择。有更好的方法吗?

【问题讨论】:

    标签: android mvvm


    【解决方案1】:

    您可以在任何地方添加用于 Internet 连接的方法,但根据我的理解,对于代码/方法方法的重用,您可以创建 Util 类,也可以将其添加到 Application 类中。 也可以参考下面的方法。

    public static boolean getConnectionStatus(Context context) {
        ConnectivityManager mConnectivityManager;
        NetworkInfo mNetworkInfoMobile, mNetworkInfoWifi;
    
        mConnectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        mNetworkInfoMobile = mConnectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
        mNetworkInfoWifi = mConnectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
        try {
            if (mNetworkInfoMobile.isConnected()) {
                App.connectivityStatus = 1;
    
                return true;
            }
        } catch (Exception exception) {
            // exception.printStackTrace();
        }
    
        if (mNetworkInfoWifi.isConnected()) {
            App.connectivityStatus = 1;
    
            return true;
        } else {
            App.connectivityStatus = 0;
            return false;
        }
    }
    

    【讨论】:

    【解决方案2】:

    在 livedata 中创建类连接管理器

    class Connectivity_check_internet(val context: Context) : LiveData<Boolean>() {
        val connectivityManager = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
        var Connnectserver: Boolean? = false
        val reciveconnctivitymanager = object : BroadcastReceiver() {
            override fun onReceive(p0: Context?, p1: Intent?) {
                Connnectserver=false
                UnpdateConnection()
                postValue(Connnectserver)
            }
        }
        init {
            UnpdateConnection()
        }
    
        fun UnpdateConnection(){
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
                val capabilities = connectivityManager.getNetworkCapabilities(connectivityManager.activeNetwork)
                capabilities?.run {
                    Connnectserver=capabilities!!.hasTransport(TRANSPORT_CELLULAR) || capabilities.hasTransport(TRANSPORT_WIFI)
                }
            } else {
                try {
                    val activeNetworkInfo = connectivityManager.activeNetworkInfo
                    Connnectserver = activeNetworkInfo != null && activeNetworkInfo.isConnected
                } catch (e: Exception) {
                }
            }
        }
    
        override fun onActive() {
            super.onActive()
            context.registerReceiver(
                reciveconnctivitymanager,
                IntentFilter("android.net.conn.CONNECTIVITY_CHANGE")
            )
        }
    
        override fun onInactive() {
            super.onInactive()
            context.unregisterReceiver(reciveconnctivitymanager)
        }
    }
    

    类 MainActivity : AppCompatActivity() { 懒惰的 val Connectivity_internet { Connectivity_check_internet(这个) }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        Connectivity_internet.observe(this,{
            Log.e("TAG", "onCreate: "+it )
        })
    
    }
    

    }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多