0

我正在开发一个使用该ScanResult对象的 Android 应用程序。该对象的形式为:

[SSID: __mynetwork__, BSSID: 00:0e:2e:ae:4e:85, capabilities: [WPA-PSK-TKIP][ESS], level: -69, frequency: 2457, timestamp: 117455824743]

我试图equals()通过创建我自己的扩展类来覆盖这个类的方法ScanResult

public class MyScanResult extends ScanResult {

    public MyScanResult() {
        super();
    }

    @Override
    public boolean equals(Object o) {
        if (this == o)
            return true;
        if (!(o instanceof ScanResult))
            return false;

        ScanResult obj = (ScanResult) obj;
        if (!BSSID.equals(obj.BSSID))
            return false;
        if (!SSID.equals(obj.SSID))
            return false;
        if (!capabilities.equals(obj.capabilities))
            return false;
        if (frequency != obj.frequency)
            return false;
        if (level != obj.level)
            return false;

        return true;
    }

}

但是,当我尝试此操作时,出现以下错误:The constructor ScanResult() is not visible. 请问我该如何解决?

4

2 回答 2

5

公共构造函数签名为ScanResult

public ScanResult(String SSID, String BSSID, String caps, int level, int frequency) 

您需要使用匹配的参数调用超类

于 2013-04-08T18:46:23.567 回答
0

显然的好方法

ScanResult期望参数:

public ScanResult(  String SSID, 
                    String BSSID,
                    String caps,
                    int level,
                    int frequency)

您可以在此处查看类定义

丑陋的方式

正如你所说,显然ScanResult是私人的。这个答案告诉您使用反射来获取构造函数。

可能唯一的方法

没有人知道这是怎么发生在你身上的(这实际上很奇怪)。但是有一个改变来解决它。点击此处链接,将该类复制到您的项目中(当然,为您的项目更改它的包),然后MyScanResult从这个继承。Android 是开源的,尽管这个类将来可能会发生变化,但您要确保它现在可以工作。然后,如果您需要原始类,您可以尝试使用新的ScanResultusing 。(android.net.wifi.ScanResult)scanResult

于 2013-04-08T18:47:36.553 回答