Autore Topic: [ListView] Una volta recuperata la ListView l'oggetto è NULL!  (Letto 946 volte)

Offline helldron

  • Utente junior
  • **
  • Post: 68
  • Respect: 0
    • Mostra profilo
[ListView] Una volta recuperata la ListView l'oggetto è NULL!
« il: 01 Novembre 2011, 12:20:38 CET »
0
Cia a tutti, sto crando una ListView che mi visualizza una serie di elementi. Tuttavia mi sono imbattuto in un errore strano sul logcat , si tratta di una risorsa di cui riesce a recuperare  l'id ma poi l'oggetto risulta NULL.

La ListView si trova nel layout di una sotto attività che mostrerà per l'appunto la lista, il tag della ListView e' il seguente:

Codice: [Seleziona]
<ListView
            android:id="@+id/myListView"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent">
    </ListView>

Questo codice si trova nella main activity. Creo una mappa per ogni oggetto della lista in input e poi setto tutto all'adapter.

Codice: [Seleziona]
List<HashMap<String, Object>> data = new ArrayList<HashMap<String,Object>>();

for(int t=0; t < listaInput.size(); t++){
                       MioOggetto s = listaInput.get(t);

                        HashMap<String,Object> map = new HashMap<String, Object>();                //creiamo una mappa di valori
                       
                        map.put("campo1", s.getCampo3());              // per la chiave campo1, l'informazine sul campo1
                        map.put("campo2", s.getCampo2());        // etc..
                        map.put("campo3", s.getCampo3());
                        data.add(map);  //aggiungiamo la mappa di valori alla sorgente dati
                       
                        }

                        String[] from = {"campo1","campo2","campo3"};       //dai valori contenuti in queste chiavi
                        int[] to = {R.id.campo1,R.id.campo2,R.id.campo3};           //Recupera agli id delle view
                       
                        /* Costruzione dell adapter */
                       
                        SimpleAdapter adapter = new SimpleAdapter(
                                        getApplicationContext(),
                                        data,                                //sorgente dati (la lista di HashMap)
                                        R.layout.view_della_list_view,         //layout contenente gli id di "to"
                                        from,
                                        to);
                       
                        //utilizzo dell'adapter
                        ((ListView)findViewById(R.id.myListView)).setAdapter(adapter);

La riga che da errore è questa e sembra che la chiamata .setAdapter dia NULL ossia findViewById(R.id.myListView)) restituisce una ListView NULL.

Codice: [Seleziona]
((ListView)findViewById(R.id.myListView)).setAdapter(adapter);
Codice: [Seleziona]
11-01 11:51:53.793: WARN/System.err(751): java.lang.NullPointerException
11-01 11:51:53.793: WARN/System.err(751):     at it.application.sinistri.activity.MainActivity.clickOnButton1(MainActivity.java:84)
11-01 11:51:53.793: WARN/System.err(751):     at it.application.sinistri.activity.MainActivity$1.onClick(MainActivity.java:35)
11-01 11:51:53.793: WARN/System.err(751):     at android.view.View.performClick(View.java:2485)
11-01 11:51:53.813: WARN/System.err(751):     at android.view.View$PerformClick.run(View.java:9080)
11-01 11:51:53.824: WARN/System.err(751):     at android.os.Handler.handleCallback(Handler.java:587)
11-01 11:51:53.873: WARN/System.err(751):     at android.os.Handler.dispatchMessage(Handler.java:92)
11-01 11:51:53.873: WARN/System.err(751):     at android.os.Looper.loop(Looper.java:130)
11-01 11:51:53.873: WARN/System.err(751):     at android.app.ActivityThread.main(ActivityThread.java:3683)
11-01 11:51:53.873: WARN/System.err(751):     at java.lang.reflect.Method.invokeNative(Native Method)
11-01 11:51:53.883: WARN/System.err(751):     at java.lang.reflect.Method.invoke(Method.java:507)
11-01 11:51:53.883: WARN/System.err(751):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
11-01 11:51:53.883: WARN/System.err(751):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
11-01 11:51:53.883: WARN/System.err(751):     at dalvik.system.NativeStart.main(Native Method)

Ho già fatto il test del recupero della risorsa, quindi sono sicuro che la listView sia un oggetto NULL. Qualche aiuto??

Grazie.
« Ultima modifica: 01 Novembre 2011, 15:00:41 CET da helldron »

Offline Verandi

  • Moderatore
  • Utente normale
  • *****
  • Post: 378
  • Respect: +75
    • Mostra profilo
  • Sistema operativo:
    Windows 7
Re:[ListView] Non riesce a recuperare l'id della ListView??
« Risposta #1 il: 01 Novembre 2011, 12:46:04 CET »
0
Ciao! L'errore sembra essere in clickOnButton1. Potresti postarci il codice di questo metodo?  ;-)

Offline helldron

  • Utente junior
  • **
  • Post: 68
  • Respect: 0
    • Mostra profilo
Re:[ListView] Non riesce a recuperare l'id della ListView??
« Risposta #2 il: 01 Novembre 2011, 14:56:20 CET »
0
Penso che dal primo post non si capisce ma in realtà tutta quella robba sta nel metodo che hai chiesto, quindi la  stack lo segnala ma poi l'errore è nella riga che ho marcato io e il motivo è perchè quel ListView è NULL grazie a un controllino fatto da me quando recupero la risorsa, ripeto che la risorsa la recupera ma è NULL e quindi il metodo setAdapter fallisce:

Codice: [Seleziona]
public void clickOnButton1(){
.
.
.
List<HashMap<String, Object>> data = new ArrayList<HashMap<String,Object>>();

for(int t=0; t < listaInput.size(); t++){
                       MioOggetto s = listaInput.get(t);

                        HashMap<String,Object> map = new HashMap<String, Object>();                //creiamo una mappa di valori
                       
                        map.put("campo1", s.getCampo3());              // per la chiave campo1, l'informazine sul campo1
                        map.put("campo2", s.getCampo2());        // etc..
                        map.put("campo3", s.getCampo3());
                        data.add(map);  //aggiungiamo la mappa di valori alla sorgente dati
                       
                        }

                        String[] from = {"campo1","campo2","campo3"};       //dai valori contenuti in queste chiavi
                        int[] to = {R.id.campo1,R.id.campo2,R.id.campo3};           //Recupera agli id delle view
                       
                        /* Costruzione dell adapter */
                       
                        SimpleAdapter adapter = new SimpleAdapter(
                                        getApplicationContext(),
                                        data,                                //sorgente dati (la lista di HashMap)
                                        R.layout.view_della_list_view,         //layout contenente gli id di "to"
                                        from,
                                        to);
                       
                        //utilizzo dell'adapter
                        ((ListView)findViewById(R.id.myListView)).setAdapter(adapter);
.
.
.
}

Offline helldron

  • Utente junior
  • **
  • Post: 68
  • Respect: 0
    • Mostra profilo
Re:[ListView] Una volta recuperata la ListView l'oggetto è NULL!
« Risposta #3 il: 01 Novembre 2011, 15:49:59 CET »
0
RISOLTO: in realtà per richiamare una risorsa bisogna settare il layout con setContenctView. Essendo il layout di un'altra attività quella ListView, a livello di codice, non poteva essere valorizzata!