2016-08-11 6 views
0

contains()メソッドが正しく動作していることは間違いありませんが、明らかに何か間違っています。私はアンドロイドアプリで作業しています。私はWiFiを検出していて、リストビューでWiFiをリストしています。私は重複を追跡するために配列を作成しているので、同じアクセスポイントの重複した出現を除外しようとしています。ここに私のコードは次のとおりです。Java ArrayList Contains()メソッドが機能しない

public void getWifi(){ 

    ListView wifiList = (ListView)findViewById(R.id.listView); 

    WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE); 
    List<ScanResult> apList = wifiManager.getScanResults(); 
    wifiManager.startScan(); 

    List<String> wifees = new ArrayList<>(); 

    //split info into arrays 
    for(int i=0; i < apList.size(); i++){ 

     String[] daList = String.valueOf(apList.get(i)).split(","); 

     String info = ""; 
     List<String> SSIDs = new ArrayList<>(); 

     for (String listItem : daList) { 
      String topic = String.valueOf(listItem.split(":")[0]); 
      String val = listItem.split(":")[1]; 
      Log.d(TAG, topic); 
      if (Objects.equals(topic, "SSID")) { 
       if(SSIDs.contains(val)){ 
        Log.d(TAG, "CONTAINS"); 
        break; 
       } else { 
        SSIDs.add(val); 
        info = val; 
       } 
      } else if (Objects.equals(topic, " level")){ 
       String strength = ""; 
       if (Integer.parseInt(val.substring(1)) >= -35) { 
        strength = "100%"; 
       } else if (Integer.parseInt(val.substring(1)) <= -35 && Integer.parseInt(val.substring(1)) >= -65) { 
        strength = "50%"; 
       } else { 
        strength = "1%"; 
       } 
       info += " " + strength; 
      } 
     } 
     wifees.add(info); 
    } 

    assert wifiList != null; 
    ArrayAdapter apter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, wifees); 
    wifiList.setAdapter(apter); 
} 

これはapList項目の内容や私がapList.get(I)を呼び出したときに私が取得される:ここでは

SSID: SCHOOL-GUEST, BSSID: 04:04:04:04:04:04, capabilities: [ESS], level: -91, frequency: 2412, timestamp: 72500687089, distance: ?(cm), distanceSd: ?(cm), passpoint: no, ChannelBandwidth: 0, centerFreq0: 0, centerFreq1: 0, 80211mcResponder: is not supported 

は、そのコードの出力である(おおよそそれは携帯電話上で、私はむしろ、セキュリティ上の理由から、AP名)が含まれないので:私はちょうど素晴らしいことだセカンドオピニオンを得ることができた場合

SCHOOL-WIRELESS  100% 
SCHOOL-SECURE  50% 
SCHOOL-GUEST  50% 
SCHOOL WIRELESS  1% 
SCHOOL_WIRELESS  1% 
SCHOOL-SECURE  1% 
SCHOOL-GUEST  1% 
bxz1872   50% 
... 
... 
... 
(so on and so forth) 

を。私は何かが明らかに欠けているように感じる。ありがとう!

+1

実際にはどこかで「SSIDs」リストを使用していますか?重複を除外するには、リストではなくセットを使用する方がよいでしょう。 –

+0

このメソッドの前に実際に宣言します。ごめんなさい。アクセスポイント名が新しいときにもリストに追加されます。私は編集します。私もセットを試してみます。しかし、私はまだこれがうまくいかないのだろうかと疑問に思います... –

+0

"apList"には何が含まれているのかをplsで説明できますか? Btw。既存のエントリを削除すると、レベルはどのようになりますか?最も強いもの? – JohnnyAW

答えて

2

.containsList<String> SSIDs = new ArrayList<>();for(int i=0; i < apList.size(); i++){と呼びます。あなたは基本的に、すべてのループ反復に対して新しい空リストを作成します。あなたは一度それを外側forループのために呼び出すべきです:

List<String> SSIDs = new ArrayList<>(); 
for(int i=0; i < apList.size(); i++){ 
    ... 
} 
+0

ありがとう!私は何かが明らかでないことを知っていた。それは問題を解決しました。 –

+0

あなたは大歓迎です:) – JohnnyAW

関連する問題