我在其他Activity中调用了MainActivity的一个函数,应用程序关闭并显示如下错误,请帮助解决这个问题。
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
}
}
在其他 Activity 中调用此函数:
var internetStatus:Boolean = MainActivity().checkInternet()
错误信息:
Caused by: 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) at com.gph.qpon.qponClickedActivity.onCreate(qponClickedActivity.kt:32)
最佳答案
我宁愿将所有逻辑提取到不同的助手或实用程序类。如果您要重用它,将它放在 Activity 中是一个很大的错误。一个非常巧妙的解决方案可能是拥有一个 ConnectivityUtils
实用程序类,例如著名的 iosched project has。 ,只是将应用程序上下文传递给它:
/**
* 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
}
}
然后,您只需在任何 Activity 中调用它,如下所示:
ConnectivityUtils.isConnected(this)
关于Android Kotlin 在其他 Activity 中调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50817655/