Android Kotlin 调用其他活动中的函数

GPH*_*GPH 2 android function android-activity kotlin

我在其他 Activity 中调用 MainActivity 的一个函数,应用程序关闭并显示如下错误,请帮助解决此问题。

主活动功能:

fun checkInternet():Boolean {
    val cm = baseContext.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
    val networkInfo = cm.activeNetworkInfo
    if (networkInfo != null && networkInfo.isConnected) {

        alertPopUp("internet ok", "")
        return true
    }
    else {
        val title = getString(R.string.No_Internet)
        val message = getString(R.string.need_internet_for_service)
        alertPopUp(title, message)

        return false
    }

}
Run Code Online (Sandbox Code Playgroud)

在其他活动中调用此函数:

var internetStatus:Boolean = MainActivity().checkInternet()
Run Code Online (Sandbox Code Playgroud)

错误信息:

引起:java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Object android.content.Context.getSystemService(java.lang.String)' on a null object reference at com.gph.qpon.MainActivity.checkInternet (MainActivity.kt:148) 在 com.gph.qpon.qponClickedActivity.onCreate(qponClickedActivity.kt:32)

GoR*_*RoS 5

我宁愿将所有逻辑提取到不同的帮助程序或实用程序类。如果你要重用它,将它放在一个活动中是一个很大的错误。一个非常巧妙的解决方案可能是拥有一个ConnectivityUtils像著名的iosched 项目那样的实用程序类,只需将应用程序上下文传递给它:

/**
 * Utility methods for dealing with connectivity
 */
object ConnectivityUtils {
  fun isConnected(context: Context): Boolean {
    val connectivityManager = context.applicationContext.getSystemService(
        Context.CONNECTIVITY_SERVICE) as ConnectivityManager
    val activeNetworkInfo = connectivityManager.activeNetworkInfo
    return activeNetworkInfo != null && activeNetworkInfo.isConnectedOrConnecting
  }
}
Run Code Online (Sandbox Code Playgroud)

然后,您只需要在任何活动中调用它,如下所示:

ConnectivityUtils.isConnected(this)
Run Code Online (Sandbox Code Playgroud)