【问题标题】:How to fix the problem with error "No virtual method" on android如何解决android上出现错误“无虚拟方法”的问题
【发布时间】:2022-07-29 17:20:43
【问题描述】:

我正在 android studio 中为 android Pie 编写一个应用程序。 我想获取 wifi 信息。

    @RequiresApi(api = Build.VERSION_CODES.S)
    public String getData() {       
 
        String wifiDataTest;
        WifiInfo wifiInfo = wifiManager.getConnectionInfo();
        int frequency = wifiInfo.getFrequency();
        int ipAddress = wifiInfo.getIpAddress();
        int speed = wifiInfo.getLinkSpeed();
        String ssid = wifiInfo.getSSID();
        int wifiStandard = wifiInfo.getWifiStandard();

        wifiDataTest = "Frequency [MHz]: " + frequency + "\nIP address: " + ipAddress
                + "\nSpeed [Mbps]: " + speed + "\nSSID: " + ssid  + "\nWifi standard: " + wifiStandard;


        return "WIFI\n" + wifiDataTest;
    }

int wifiStandard = wifiInfo.getWifiStandard (); 显示错误:

E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.sensors, PID: 11040
    java.lang.NoSuchMethodError: No virtual method getWifiStandard()I in class Landroid/net/wifi/WifiInfo; or its super classes (declaration of 'android.net.wifi.WifiInfo' appears in /system/framework/framework.jar)

我在任何地方都没有找到有关此类错误的信息。 getWifiStandard (); 之前的一切都运行良好。

【问题讨论】:

    标签: java android android-studio android-wifi android-9.0-pie


    【解决方案1】:

    您正在尝试运行包含 getWifiStandard() 方法的应用,该方法仅存在于 Android 11 或更高版本上。

    试试这个:

    public String getData() {
    
            String wifiDataTest;
            WifiInfo wifiInfo = wifiManager.getConnectionInfo();
            int frequency = wifiInfo.getFrequency();
            int ipAddress = wifiInfo.getIpAddress();
            int speed = wifiInfo.getLinkSpeed();
            String ssid = wifiInfo.getSSID();
            String wifiStandard = "";
            
            if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.R) {
                wifiDataTest = "Frequency [MHz]: " + frequency + "\nIP address: " + ipAddress
                        + "\nSpeed [Mbps]: " + speed + "\nSSID: " + ssid + "\nWifi standard: " + wifiInfo.getWifiStandard();
            } else {
                if (wifiInfo.getLinkSpeed() <= 11) wifiStandard =  "802.b";
                else if (wifiInfo.getLinkSpeed() <= 54) wifiStandard =  "802.g";
                else if (wifiInfo.getLinkSpeed() <= 300) wifiStandard =  "802.11n";
                else if (wifiInfo.getLinkSpeed() <= 866.5) wifiStandard =  "802.11ac";
                
                wifiDataTest = "Frequency [MHz]: " + frequency + "\nIP address: " + ipAddress
                        + "\nSpeed [Mbps]: " + speed + "\nSSID: " + ssid + "\nWifi standard: " + wifiStandard;
            }
           
            return "WIFI\n" + wifiDataTest;
        }
    

    【讨论】:

      【解决方案2】:

      可能你只是引用了函数,函数没有被调用,记得加()。 错误的例子:

      fun main(callback: () -> Unit) = callback
      

      正确的例子:

      fun main(callback: () -> Unit) = callback()
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-12-14
        • 2013-10-23
        • 1970-01-01
        • 2013-08-29
        • 1970-01-01
        • 2019-06-28
        相关资源
        最近更新 更多