Android Studio添加网络连接检测代码后出现方法重写/实现错误求助
解决Android Studio网络检测代码报错:method does not override or implement a method from a supertype
兄弟,你遇到的这个报错其实是新手刚接触Android开发时很容易踩的坑,我帮你拆解下原因和解决办法:
这个错误提示的核心意思是:你用了@Override注解,但你写的方法并没有重写父类(比如AppCompatActivity)里的任何方法——要么是不该加这个注解的地方乱加了,要么是方法签名写错了。另外你提到的NetworkInfo类,在Android API 29(Android 10)之后已经被官方废弃了,就算勉强用也会有兼容性问题,这也是你可能踩的另一个坑。
下面给你一步步解决的方案:
第一步:去掉错误的@Override注解
如果你是自己写了一个网络检测的自定义方法(比如叫checkNetwork()),那这个方法不是系统父类自带的,绝对不能加@Override。比如你之前可能写了这样的代码:
@Override public void checkNetwork() { // 你的网络检测代码 }
直接把@Override删掉就好,这个注解只能用在真正重写父类方法的场景(比如onCreate()这种生命周期方法)。
第二步:用新API替代废弃的NetworkInfo实现网络检测
因为NetworkInfo已经被弃用,推荐用Android官方推荐的ConnectivityManager新API来做网络检测,兼容性更好。下面是完整的示例代码:
1. 先在AndroidManifest.xml中添加网络权限
<!-- 获取网络状态权限 --> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <!-- 访问互联网权限(如果需要加载网络内容) --> <uses-permission android:name="android.permission.INTERNET" />
2. 在MainActivity中实现正确的网络检测逻辑
import android.content.Context; import android.net.ConnectivityManager; import android.net.Network; import android.net.NetworkCapabilities; import android.os.Bundle; import androidx.appcompat.app.AppCompatActivity; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 检测网络状态 if (isNetworkAvailable(this)) { // 网络可用,继续你的WebView加载逻辑 // WebView myWebView = findViewById(R.id.w...); // 这里补充你的WebView代码 } else { // 网络不可用,提示用户 } } // 自定义网络检测方法,不需要加@Override private boolean isNetworkAvailable(Context context) { ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); if (connectivityManager == null) { return false; } // 获取当前活跃网络 Network activeNetwork = connectivityManager.getActiveNetwork(); if (activeNetwork == null) { return false; } // 判断网络是否具备上网能力 NetworkCapabilities networkCapabilities = connectivityManager.getNetworkCapabilities(activeNetwork); return networkCapabilities != null && ( networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) || networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR) || networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_ETHERNET) ); } }
再复盘下你的问题根源
大概率是你给自己写的自定义网络检测方法错误地加了@Override注解,而这个方法并不是AppCompatActivity父类中的方法,所以编译器直接报错。另外用了废弃的NetworkInfo,就算解决了注解问题,后续也会有警告甚至运行时兼容性问题,所以直接换成新API更稳妥。
如果还有WebView相关的问题,随时说哈!
内容的提问来源于stack exchange,提问作者Ahmad Abdu Zaky
相关产品推荐
相关产品推荐

