如何使用错误“无虚拟方法”解决问题。在Android上

发布于 2025-01-22 07:21:06 字数 1200 浏览 3 评论 0原文

我正在为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();之前的所有内容都很好。

I am writing an application in android studio for android Pie.
I want to get wifi info.

    @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;
    }

With int wifiStandard = wifiInfo.getWifiStandard (); shows me the error:

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)

I have not found information about such an error anywhere. Everything before getWifiStandard (); worked fine.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

断爱 2025-01-29 07:21:06

您正在尝试运行包含仅在Android 11或UP上的getWifistAndard()方法的应用程序。

尝试以下操作:

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;
    }

You're trying to run your app which contains the getWifiStandard() method that exists ONLY on Android 11 or up.

Try this :

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;
    }
弃爱 2025-01-29 07:21:06

位置1:也许您只是参考函数,丢失()

  • 错误的示例:

    fun main(呼叫:() - &gt; unit)=呼叫

  • 正确示例:

    fun main(callback:() - &gt; unit)= callback()

坐姿2:功能是工作,需要为单位

  • 错误的示例:

    fun main(呼叫:() - &gt; unit)=
    mainscope()。启动{
    打回来()
    }

  • 正确的示例:

    fun main(呼叫:() - &gt; unit){
    mainscope()。启动{
    打回来()
    }
    }

座位3:只是Google&amp;上帝知道;))

Situtation 1: It's maybe you just reference to the function, missing ()

  • wrong example:

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

  • correct example:

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

Situtation 2: the function is a Job, needed to be an Unit

  • wrong example:

    fun main(callback: () -> Unit) =
    MainScope().launch {
    callback()
    }

  • correct example:

    fun main(callback: () -> Unit) {
    MainScope().launch {
    callback()
    }
    }

Situtation 3: just Google & God know ;))

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文