我正在开发一个使用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
。我该怎么解决这个问题呢?
答案 0 :(得分:5)
ScanResult
的公共构造函数签名是:
public ScanResult(String SSID, String BSSID, String caps, int level, int frequency)
您需要使用匹配参数
调用超类答案 1 :(得分:0)
显然很好的方式:
ScanResult
需要参数:
public ScanResult( String SSID,
String BSSID,
String caps,
int level,
int frequency)
您可以查看课程定义here
丑陋的方式:
正如你所说,显然ScanResult
是私人的。 This answer告诉您使用反射来获取构造函数。
可能唯一的方式:
没人知道这是怎么发生的(实际上很奇怪)。但是有一个改变来解决它。点击here链接,将类复制到您的项目中(当然更改它的包),然后让MyScanResult
继承此项。 Android是开源的,尽管这个类可能会在未来发生变化,但您确保现在可以使用它。然后,如果您需要原始类,则可以尝试使用ScanResult
转换新的(android.net.wifi.ScanResult)scanResult
。