Bonjour a tous,
je me permet de solliciter votre aide car je n'arrive pas à résoudre un probleme.
Lorsque je lance mon appli j'ai une erreur de stackOverflowError, je ne sais pas pourquoi elle se produit. J'ai fais une classe Asynchrone car je pensais que mon erreur pouvais venir de cela. Il me semble avoir lu quelque part que la connexion ne pouvait pas se faire dans le thread principal. Mais en fait ce n'est pas le probleme. Voici mon code:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
public class fragment_listReseau extends Fragment {
    private View rootView;
    private ListView listReseau;
    private TextView te;
    private WifiManager wifi;
    private WifiScanReceiver receiverWifi;
    private List<ScanResult> wifiList;
    private ArrayList ada;
    @Override
    public View onCreateView(final LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
        rootView = inflater.inflate(R.layout.layout_listreseau,container, false);
        listReseau = (ListView) rootView.findViewById(R.id.listReseau);
        receiverWifi = new WifiScanReceiver();
        inflater.getContext().registerReceiver(receiverWifi,new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));
        wifi = (WifiManager)inflater.getContext().getSystemService(Context.WIFI_SERVICE);
        if(!wifi.isWifiEnabled()){
            wifi.setWifiEnabled(true);
        }
 
        ada = new ArrayList();
 
        listReseau.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
 
                Object o = listReseau.getItemAtPosition(position).toString();
                if(o.toString().equals("malabar")){
                    Toast.makeText(getActivity().getApplicationContext(),"toto est la",Toast.LENGTH_LONG).show();
                    /*WifiConfiguration w = new WifiConfiguration();
                    String mdp = "LLM_050810";
                    w.SSID = "\"malabar\"";
                    w.preSharedKey = mdp;*/
                    Connect c = new Connect();
                    c.execute();
                }
                else{
                    Toast.makeText(getActivity().getApplicationContext(),"toto est pas la:"+o.toString(),Toast.LENGTH_LONG).show();
                }
            }
        });
 
        wifi.startScan();
        return rootView;
    }
 
    public WifiConfiguration WifiConfig(){
        WifiConfiguration wifiConfig = new WifiConfiguration();
        wifiConfig.SSID = "\"malabar\"";
        WifiConfig().preSharedKey = "\"****\"";
        wifiConfig.hiddenSSID = true;
        wifiConfig.priority = 40;
        wifiConfig.status = WifiConfiguration.Status.DISABLED;
        wifiConfig.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
        wifiConfig.allowedProtocols.set(WifiConfiguration.Protocol.RSN);
        wifiConfig.allowedProtocols.set(WifiConfiguration.Protocol.WPA);
        wifiConfig.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.OPEN);
        wifiConfig.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.SHARED);
        wifiConfig.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP);
        wifiConfig.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP);
        wifiConfig.allowedGroupCiphers.set(WifiConfiguration.PairwiseCipher.TKIP);
        wifiConfig.allowedGroupCiphers.set(WifiConfiguration.PairwiseCipher.CCMP);
 
        return wifiConfig;
    }
    public class Connect extends AsyncTask<Void,Void,Void>{
 
        @Override
        protected Void doInBackground(Void... params) {
            WifiConfiguration w = WifiConfig();
            int networkId = wifi.addNetwork(w);
            wifi.enableNetwork(networkId,true);
            return null;
        }
    }
    public class WifiScanReceiver extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
            wifiList = wifi.getScanResults();
            //te.setText(wifiList.get(0).toString());
            for(int i = 0;i<wifiList.size();i++){
                ada.add(wifiList.get(i).SSID);
            }
            ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity().getApplicationContext(),
                    android.R.layout.simple_list_item_1,ada);
            listReseau.setAdapter(adapter);
        }
    }
}
Quelques infos sur ll'erreur, la ligne 80 correspond a wifiConfig.preSharerdKey:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 Caused by: java.lang.StackOverflowError
            at java.util.BitSet.<init>(BitSet.java:97)
            at java.util.BitSet.<init>(BitSet.java:77)
            at android.net.wifi.WifiConfiguration.<init>(WifiConfiguration.java:427)
            at com.cours.alex.tp_reseaux.fragment_listReseau.WifiConfig(fragment_listReseau.java:78)
            at com.cours.alex.tp_reseaux.fragment_listReseau.WifiConfig(fragment_listReseau.java:80)
Merci, bonne soirée