0

オブジェクトを利用する Android アプリケーションを開発していScanResultます。このオブジェクトの形式は次のとおりです。

[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プライベートです。この答えは、リフレクションを使用してコンストラクターに到達することを示しています。

おそらく唯一の方法

これがあなたにどのように起こるかは誰にもわかりません (実際には奇妙です)。しかし、それを解決するための変更があります。hereリンクをクリックし、クラスをプロジェクトにコピーし (もちろん、パッケージを変更してください)、このクラスMyScanResultから継承するだけです。Android はオープン ソースです。このクラスは将来変更される可能性がありますが、すぐに機能することを確認してください。次に、プリミティブ クラスが必要な場合は、ScanResultを使用して新しいキャストを試すことができます。(android.net.wifi.ScanResult)scanResult

于 2013-04-08T18:47:36.553 に答える