Autore Topic: listview da array ..  (Letto 91 volte)

Offline gfx

  • Nuovo arrivato
  • *
  • Post: 18
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    galaxy
  • Sistema operativo:
    ubuntu 14.04
listview da array ..
« il: 17 Novembre 2016, 10:25:55 CET »
0
è la prima volta che utilizzo una listview ... perciò siate clementi ..il codice xml
 
Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:orientation="horizontal"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   android:id="@+id/wifidiag_layout">

    <TextView
       android:textSize="16sp"
       android:padding="5dp"
       android:layout_gravity="center_vertical"
       android:id="@+id/wifi_name"
       android:layout_height="wrap_content"
       android:layout_weight="1"
       android:layout_width="0dp" />

    <ImageView
       android:id="@+id/wifi_img"
       android:layout_gravity="center_vertical"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:src="@drawable/wifi_level" />

</LinearLayout>

tutto quello che viene in seguito è inserito nella mia main activity ... credo di avere sbagliato qualcosa nel chiamare i layout e gli id ma non saprei cosa....

Codice (Java): [Seleziona]
 public class WifiScanReceiver extends BroadcastReceiver {
        @SuppressLint("UseValueOf")
        public void onReceive(Context c, Intent intent) {
            List<ScanResult> wifiScanList = mainWifiObj.getScanResults();
            wifis = new String[wifiScanList.size()];
            for(int i = 0; i < wifiScanList.size(); i++){
                wifis[i] = ((wifiScanList.get(i)).toString());
            }
            String filtered[] = new String[wifiScanList.size()];
            int counter = 0;
            for (String eachWifi : wifis) {
                String[] temp = eachWifi.split(",");

                filtered[counter] = temp[0].substring(5).trim()+"\n" + temp[2].substring(12).trim()+"\n" +temp[3].substring(6).trim();//0->SSID, 2->Key Management 3-> Strength


                counter++;

            }
            list.setAdapter(new ArrayAdapter<String>(getApplicationContext(),
                    android.R.layout.simple_list_item_1, filtered));


        }
    }

Codice (Java): [Seleziona]
    private boolean isWifiConnected() {
        WifiScanReceiver wifiReciever = new WifiScanReceiver();
        registerReceiver(wifiReciever, new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));
        ConnectivityManager connMgr = (ConnectivityManager)
                getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();
        return networkInfo != null && (ConnectivityManager.TYPE_WIFI == networkInfo.getType()) && networkInfo.isConnected();
    }

en in fine da un menù faccio partire la richiesta ... lo scopo è viasualizzare la lista dei punti di connessione wifi disponibili....

Codice (Java): [Seleziona]
@Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();


        if(id == R.id.cerca_connessione){



            if(isWifiConnected()){

                setContentView(R.layout.wifidiag_layout);
                list = (ListView)findViewById(R.id.wifi_name);
                mainWifiObj = (WifiManager) getSystemService(Context.WIFI_SERVICE);
                wifiReciever = new WifiScanReceiver();
                mainWifiObj.startScan();
            }
            else
            {
                Toast.makeText(getApplicationContext(), " Make WiFi -ON- First! ", Toast.LENGTH_SHORT).show();
            }
            return true;
        }
        if(id == R.id.scelta_dispositivo){
            Toast.makeText(getApplicationContext(), "Connessioni is selected!", Toast.LENGTH_SHORT).show();
            return true;
        }
.....

il problema è che tutto viene compilato correttamente ... ma se installo l'applicazione su un dispositivo con sdk23 ... se wifi è disable ottengo correttamente il messaggio toast altrimenti la app va in crash...

Codice: [Seleziona]
E/AndroidRuntime: FATAL EXCEPTION: main
                  Process: com.example.office.androidkc1, PID: 23857
                  java.lang.ClassCastException: android.support.v7.widget.AppCompatTextView cannot be cast to android.widget.ListView
                      at com.example.office.androidkc1.FullscreenActivity.onOptionsItemSelected(FullscreenActivity.java:431)
                      at android.app.Activity.onMenuItemSelected(Activity.java:3204)
                      at android.support.v4.app.FragmentActivity.onMenuItemSelected(FragmentActivity.java:408)
                      at android.support.v7.app.AppCompatActivity.onMenuItemSelected(AppCompatActivity.java:198)
                      at android.support.v7.view.WindowCallbackWrapper.onMenuItemSelected(WindowCallbackWrapper.java:107)
                      at android.support.v7.app.AppCompatDelegateImplV9.onMenuItemSelected(AppCompatDelegateImplV9.java:671)
                      at android.support.v7.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:817)
                      at android.support.v7.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:156)
                      at android.support.v7.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:964)
                      at android.support.v7.view.menu.MenuPopup.onItemClick(MenuPopup.java:127)
                      at android.widget.AdapterView.performItemClick(AdapterView.java:345)
                      at android.widget.AbsListView.performItemClick(AbsListView.java:1547)
                      at android.widget.AbsListView$PerformClick.run(AbsListView.java:3821)
                      at android.widget.AbsListView.onTouchUp(AbsListView.java:5856)
                      at android.widget.AbsListView.onTouchEvent(AbsListView.java:5615)
                      at android.support.v7.widget.ListViewCompat.onTouchEvent(ListViewCompat.java:124)
                      at android.view.View.dispatchTouchEvent(View.java:9993)
                      at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2828)
                      at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2499)
                      at android.widget.AbsListView.dispatchTouchEvent(AbsListView.java:5547)
                      at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2839)
                      at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2514)
                      at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2839)
                      at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2514)
                      at android.widget.PopupWindow$PopupDecorView.dispatchTouchEvent(PopupWindow.java:2286)
                      at android.view.View.dispatchPointerEvent(View.java:10228)
                      at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:5344)
                      at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:5180)
                      at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4620)
                      at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4673)
                      at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4639)
                      at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:4781)
                      at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:4647)
                      at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:4838)
                      at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4620)
                      at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4673)
                      at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4639)
                      at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:4647)
                      at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4620)
                      at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:7306)
                      at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:7184)
                      at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:7145)
                      at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:7416)
                      at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:185)
                      at android.os.MessageQueue.nativePollOnce(Native Method)
                      at android.os.MessageQueue.next(MessageQueue.java:323)
                      at android.os.Looper.loop(Looper.java:143)
                      at android.app.ActivityThread.main(ActivityThread.java:7224)
                      at java.lang.reflect.Method.invoke(Native Method)
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
I/Process: Sending signal. PID: 23857 SIG: 9
Application terminated.


Offline NetGEL

  • Utente normale
  • ***
  • Post: 196
  • Respect: +9
    • Google+
    • Mostra profilo
  • Play Store ID:
    NetGEL
Re:listview da array ..
« Risposta #1 il: 17 Novembre 2016, 10:55:34 CET »
0
Ciao non ho letto tutto il codice ma quello che salta all'occhio è che hai fatto un cast a una ListView di una TextView per quello ti dà errore.

Codice (Java): [Seleziona]
(ListView)findViewById(R.id.wifi_name);
wifi_name è una TextView

Offline gfx

  • Nuovo arrivato
  • *
  • Post: 18
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    galaxy
  • Sistema operativo:
    ubuntu 14.04
Re:listview da array ..
« Risposta #2 il: 18 Novembre 2016, 10:24:10 CET »
0
@netGEL ... hai ragione ... quindi per gioco ho provato a far iventare wifi_name una list view ... errore scomparso ma schermo nero ...... fondalmentalmente credo di sbagliare approccio al problema ....:

quello che vorrei fare:

aprire il mio menu a tendina generato con:

Codice (Java): [Seleziona]
 @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.kc1info, menu);
        getMenuInflater().inflate(R.menu.kc1menu, menu);

        return true;
    }

1-cliccare sul primo item del kc1menu ...
2-fare partire il i controllo del wifi attivo oppure no (vedi codice sotto)
2-se il wifi e disattivo lanciare un messaggio toast oppure un dialogalarm (fino a qui tutto bene nessun problema)
3-se il wifi è attivo fare partire il wifi scan e mostrare una lista di wifi point a cui connettersi
4-connettersi al wifi scelto cliccando su una riga della lista

(codice per il controllo della connessione wifi... c'è o non c'è)
Codice (Java): [Seleziona]
    private boolean isWifiConnected() {
        WifiScanReceiver wifiReciever = new WifiScanReceiver();
        registerReceiver(wifiReciever, new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));
        ConnectivityManager connMgr = (ConnectivityManager)
                getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();
        return networkInfo != null && (ConnectivityManager.TYPE_WIFI == networkInfo.getType()) && networkInfo.isConnected();
    }

il punto 4 e 5 non ho proprio capito come gestirli (ho cominciato con java e android la settimana scorsa e ci dedico 1 ora giorno + lo studio dei forum la sera)

quello che credo debba essere fatto per i punti 4 e 5:
1-LAYOUT -- creare un layout della riga -> inserirlo nel layout di una lista -> inserirlo nel layout di un dialog ..... è vero????? (che macchinoso)... come mettere assiem questy layout nella mia main activity??
2-CODICE -- registrare un wifireceiver e attivarlo (vero?)
3-creare un intent e assegnargli il layout dialog e dentro ad esso
4-creare una adapter array list e assegnarlùgli il layout lista
5-e dentro all'array list realizzare un ciclo for per scannerizzare i wifi disponibili assegnado al risultato "nome wifi" l'item wifi_name della list.... è corretto??

Se la logica di quello che ho capito ... con un po' di impegno ci arriverò da solo .... ma credo di fare confusione su qualche punto

... allora probabnilmente sbaglio a usare il layout .... infatti mi da errore sempre in questo punto del codice .... quando sono in debug ...

Codice (Java): [Seleziona]
public class WifiScanReceiver extends BroadcastReceiver {
        @SuppressLint("UseValueOf")
        public void onReceive(Context c, Intent intent) {
            setContentView(R.layout.wifidiag_layout);
            List<ScanResult> wifiScanList = mainWifiObj.getScanResults();
            wifis = new String[wifiScanList.size()];
            for(int i = 0; i < wifiScanList.size(); i++){
                wifis[i] = ((wifiScanList.get(i)).toString());
            }
            list.setAdapter(new ArrayAdapter<String>(getApplicationContext(),
                    android.R.layout.simple_list_item_1, wifis));

questo codice stà nella mia main activity .... ma qui ...
Codice (Java): [Seleziona]
list.setAdapter(new ArrayAdapter<String>(getApplicationContext(),
                    android.R.layout.simple_list_item_1, wifis));

credo di usare una fatidica lista di layout che non fa parte lùdel layout della lista presente nel mio dialog ... ma credo dovrebbe essere presente solo nella main (ma non c'è)...


Grazie se Vorray corregermi

Giorgio

Post unito: [time]18 Novembre 2016, 12:27:54 CET[/time]
ok ok ho sbagliato un po' di cose .....

Codice (Java): [Seleziona]
public class WifiScanReceiver extends BroadcastReceiver {  questo non si può fare se è scritto nella mia main activity .....

e sopratutto la gestione del dialog scan wifi deve avvenire dentro la funzione di scelta del menu:

Codice (Java): [Seleziona]
.........

 if(id == R.id.cerca_connessione){

            if(isWifiConnected()){

                String test[] ={"pappa","ciccia","bibe","mama"};
                /*WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE); <------- questa parte non mi funziona e non ho capito il perchè
                List<ScanResult> wifiScanList = wifiManager.getScanResults();
                wifis = new String[wifiScanList.size()];
                for(int i = 0; i < wifiScanList.size(); i++){
                    wifis[i] = ((wifiScanList.get(i)).toString());
                }*/

                AlertDialog.Builder alertDialog = new AlertDialog.Builder(FullscreenActivity.this);
                LayoutInflater inflater = getLayoutInflater();
                View convertView = (View) inflater.inflate(R.layout.wifi_list, null);
                alertDialog.setView(convertView);
                alertDialog.setTitle("Avaiable WiFi Connections");
                ListView lv = (ListView) convertView.findViewById(R.id.WiFiList);
                ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,test);
                lv.setAdapter(adapter);
                alertDialog.show();


            }
            else
            {
                Toast.makeText(getApplicationContext(), " Make WiFi -ON- First! ", Toast.LENGTH_SHORT).show();
            }
            return true;
        }
        if(id == R.id.scelta_dispositivo){
...............

in questo modo la lista compare senza problemi .... ma se cerco di fare lo scan dei wifi mi ritorna una lista vuota ... (ci sono due access wifi accanto a me e il wifi è attivo)..

Grazie dell'aiuto
Giorgio

Post unito: 18 Novembre 2016, 13:26:08 CET
Codice (Java): [Seleziona]
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();


        if(id == R.id.cerca_connessione){



            if(isWifiConnected()){

                WifiManager wifiMgr  = (WifiManager) getSystemService(Context.WIFI_SERVICE);
                wifiMgr.startScan();
                List<WifiConfiguration> wifiScanList = wifiMgr.getConfiguredNetworks();
                wifis = new String[wifiScanList.size()];
                for(int i = 0; i < wifiScanList.size(); i++){
                    wifis[i] = ((wifiScanList.get(i)).toString());
                }
                AlertDialog.Builder alertDialog = new AlertDialog.Builder(FullscreenActivity.this);
                LayoutInflater inflater = getLayoutInflater();
                View convertView = (View) inflater.inflate(R.layout.wifi_list, null);
                alertDialog.setView(convertView);
                alertDialog.setTitle("Avaiable WiFi Connections");
                final ListView lv = (ListView) convertView.findViewById(R.id.WiFiList);
                ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,wifis);
                lv.setAdapter(adapter);
                alertDialog.show();
                final String[] testName = new String[1];


                lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {

                    @Override
                    public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                                            long arg3) {
                        // TODO Auto-generated method stub
                        String text = (String) lv.getItemAtPosition(arg2);
                        Toast.makeText(getApplicationContext(), text, Toast.LENGTH_SHORT).show();

                    }
                });

            }
            else
            {
                Toast.makeText(getApplicationContext(), " Make WiFi -ON- First! ", Toast.LENGTH_SHORT).show();
            }
            return true;
        }
        if(id == R.id.scelta_dispositivo){

Grazie a tutti

Così funziona .....
Giorgio
« Ultima modifica: 18 Novembre 2016, 13:26:09 CET da gfx, Reason: Merged DoublePost »