Autore Topic: Errore Spinner  (Letto 813 volte)

Offline Androi-dé!

  • Utente junior
  • **
  • Post: 62
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S4
  • Sistema operativo:
    Windows 7
Errore Spinner
« il: 14 Marzo 2012, 00:45:35 CET »
0
Ho trovato un semplice tutorial sull'uso di uno spinner creato dinamicamente, ho inserito il codice nel mio progetto e sembrava filare tutto liscio ma invece ricevo un errore che non riesco ad individuare.
Il codice inserito è il seguente:

Nell'onCreate:
Codice (Java): [Seleziona]
addItemsOnSpinner();
addListenerOnSpinnerItemSelection();

Poi sempre nella stessa classe:

Codice (Java): [Seleziona]
          // add items into spinner dynamically
          public void addItemsOnSpinner() {
         
                Spinner spinner1 = (Spinner) findViewById(R.id.spinner1);
                List<String> list = new ArrayList<String>();
                list.add("list 1");
                list.add("list 2");
                list.add("list 3");
                ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, list);
                dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
                spinner1.setAdapter(dataAdapter);
          }
         
          // get the selected dropdown list value
          public void addListenerOnSpinnerItemSelection() {
         
                Spinner spinner1 = (Spinner) findViewById(R.id.spinner1);
                spinner1.setOnItemSelectedListener(new CustomOnItemSelectedListener());
          }

In una classe diversa:

Codice (Java): [Seleziona]
public class CustomOnItemSelectedListener implements OnItemSelectedListener {
 
  public void onItemSelected(AdapterView<?> parent, View view, int pos,long id) {
        Toast.makeText(parent.getContext(),
                "OnItemSelectedListener : " + parent.getItemAtPosition(pos).toString(),
                Toast.LENGTH_SHORT).show();
  }
 
  @Override
  public void onNothingSelected(AdapterView<?> arg0) {
        // TODO Auto-generated method stub
  }
 
}

L'xml:

Codice (XML): [Seleziona]
        <Spinner
                android:id="@+id/spinner1"
                android:layout_width="match_parent"
                android:layout_height="wrap_content" />


Il LOGCAT:

Codice: [Seleziona]
03-14 00:43:26.210: ERROR/AndroidRuntime(1459): FATAL EXCEPTION: main
03-14 00:43:26.210: ERROR/AndroidRuntime(1459): java.lang.RuntimeException: Unable to start activity ComponentInfo{it.mioprogetto.Dashboard/it.mioprogetto.Dashboard.HomeActivity}: java.lang.NullPointerException
03-14 00:43:26.210: ERROR/AndroidRuntime(1459):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1651)
03-14 00:43:26.210: ERROR/AndroidRuntime(1459):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1667)
03-14 00:43:26.210: ERROR/AndroidRuntime(1459):     at android.app.ActivityThread.access$1500(ActivityThread.java:117)
03-14 00:43:26.210: ERROR/AndroidRuntime(1459):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:935)
03-14 00:43:26.210: ERROR/AndroidRuntime(1459):     at android.os.Handler.dispatchMessage(Handler.java:99)
03-14 00:43:26.210: ERROR/AndroidRuntime(1459):     at android.os.Looper.loop(Looper.java:123)
03-14 00:43:26.210: ERROR/AndroidRuntime(1459):     at android.app.ActivityThread.main(ActivityThread.java:3691)
03-14 00:43:26.210: ERROR/AndroidRuntime(1459):     at java.lang.reflect.Method.invokeNative(Native Method)
03-14 00:43:26.210: ERROR/AndroidRuntime(1459):     at java.lang.reflect.Method.invoke(Method.java:507)
03-14 00:43:26.210: ERROR/AndroidRuntime(1459):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:847)
03-14 00:43:26.210: ERROR/AndroidRuntime(1459):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:605)
03-14 00:43:26.210: ERROR/AndroidRuntime(1459):     at dalvik.system.NativeStart.main(Native Method)
03-14 00:43:26.210: ERROR/AndroidRuntime(1459): Caused by: java.lang.NullPointerException
03-14 00:43:26.210: ERROR/AndroidRuntime(1459):     at it.mioprogetto.Dashboard.DashboardActivity.addItemsOnSpinner(DashboardActivity.java:76)
03-14 00:43:26.210: ERROR/AndroidRuntime(1459):     at it.mioprogetto.Dashboard.DashboardActivity.onCreate(DashboardActivity.java:59)
03-14 00:43:26.210: ERROR/AndroidRuntime(1459):     at it.mioprogetto.Dashboard.HomeActivity.onCreate(HomeActivity.java:41)
03-14 00:43:26.210: ERROR/AndroidRuntime(1459):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
03-14 00:43:26.210: ERROR/AndroidRuntime(1459):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1615)
03-14 00:43:26.210: ERROR/AndroidRuntime(1459):     ... 11 more


Non capisco cosa non trovi di "NullPointerException" anche perchè a quel numero di righe segnalato ci sono dei commenti che erano già presenti nel file della dashboard che sto usando come base  o_O
« Ultima modifica: 14 Marzo 2012, 00:47:07 CET da Androi-dé! »

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Errore Spinner
« Risposta #1 il: 14 Marzo 2012, 08:15:30 CET »
+1
Anche al rigo 76 di DashboardActivity ci sono dei commenti?

Codice: [Seleziona]
03-14 00:43:26.210: ERROR/AndroidRuntime(1459):     at it.mioprogetto.Dashboard.DashboardActivity.addItemsOnSpinner(DashboardActivity.java:76)
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline eagledeveloper

  • Translate Team
  • Utente senior
  • ****
  • Post: 516
  • Respect: +37
    • Google+
    • 347516210
    • dark_pinz
    • @WandDStudios
    • Mostra profilo
    • W&D Studios
  • Dispositivo Android:
    HTC One X e HTC One
  • Play Store ID:
    W%26D+Studios
  • Sistema operativo:
    Ubuntu / Windows 7
Re:Errore Spinner
« Risposta #2 il: 14 Marzo 2012, 08:39:31 CET »
0
L'errore secondo me e' qui:

Codice (Java): [Seleziona]
Spinner spinner1 = (Spinner) findViewById(R.id.spinner1);
Nell'onCreate hai fatto setContentView(R.layout.tuoLayout)? Dove tuoLayout contiene lo Spinner con id = spinner1.

Altrimenti puoi fare:

Codice (Java): [Seleziona]
Spinner spinner1 = new Spinner(context);
Ovviamente il context (puoi usare this se sei nell'onCreate) devi darglielo tu. Poi quello Spinner lo aggiungi al tuo Layout.

Saluti.
I numeri contano molto di più del seme.

Offline Androi-dé!

  • Utente junior
  • **
  • Post: 62
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S4
  • Sistema operativo:
    Windows 7
Re:Errore Spinner
« Risposta #3 il: 14 Marzo 2012, 09:52:57 CET »
0
Appena ho accesso al pc dove ho il progetto verifico ma ho comunque dietro la parte di interesse che vi riporto.
Dico che ci sono dei commenti perchè facendo il doppio click su quella riga mi apre la pagina a quella riga con dei commenti, il fatto è che la dashboard è strutturata in modo un po' strano (dal mio punto di vista ovviamente), comunque all'apertura si apre HomeActivity:

Codice (Java): [Seleziona]
public class HomeActivity extends DashboardActivity
{


protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_home);
}
...

che estende DashboardActivity:

Codice (Java): [Seleziona]
public abstract class DashboardActivity extends Activity
{


protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    //setContentView(R.layout.activity_default);

addItemsOnSpinner();
addListenerOnSpinnerItemSelection();

}

// le funzioni di cui sopra
...

Il mio spinner è in R.layout.activity_home, il problema secondo me è in questo passaggio qua dove probabilmente non mi vede lo spinner perchè è nel layout chiamato in HomeActivity mentre io lo richiamo dalla classe estesa.
Tra l'altro non so nemmeno quanto sia necessaro questo passaggio ma non conoscendo questo tipo di architettura con cui è stata creata la dashboard ho lasciato le cose come stavano anche se su due piedi non vedo l'ultilità di estendere quella classe a un'altra.

Offline eagledeveloper

  • Translate Team
  • Utente senior
  • ****
  • Post: 516
  • Respect: +37
    • Google+
    • 347516210
    • dark_pinz
    • @WandDStudios
    • Mostra profilo
    • W&D Studios
  • Dispositivo Android:
    HTC One X e HTC One
  • Play Store ID:
    W%26D+Studios
  • Sistema operativo:
    Ubuntu / Windows 7
Re:Errore Spinner
« Risposta #4 il: 14 Marzo 2012, 10:36:41 CET »
+1
Esatto tu prima lanci i metodi:

Codice (Java): [Seleziona]
addItemsOnSpinner();
addListenerOnSpinnerItemSelection();

e solo poi fai:

Codice (Java): [Seleziona]
setContentView(R.layout.activity_home);
Quindi il tuo Spinner e' null.
Non puoi lanciare i tuoi due metodi dalla classe figlia? Nella HomeActivity dopo aver fatto setContentView(R.layout.activity_home)?

Saluti.
I numeri contano molto di più del seme.

Offline Androi-dé!

  • Utente junior
  • **
  • Post: 62
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S4
  • Sistema operativo:
    Windows 7
Re:Errore Spinner
« Risposta #5 il: 14 Marzo 2012, 11:42:05 CET »
0
Avevo provato ieri sera spostando tutto nell'onCreate della classe HomeActivity ma mi dava lo stesso errore, poi data l'ora ho rinunciato con le prove, stasera riprovo ma ricordo che spostando solo le due chiamate ricevevo un errore direttamente su eclipse, spostando invece tutto potevo compilare ma poi ero alle solite con il crash dell'applicazione.

Comunque il main è:

Codice (XML): [Seleziona]
      <activity android:name=".HomeActivity"
                 android:label="@string/app_name">
         <intent-filter>
             <action android:name="android.intent.action.MAIN" />
             <category android:name="android.intent.category.LAUNCHER" />
         </intent-filter>
      </activity>

Ma.. domanda da ignorante, è necessario estendere la classe o è perchè sono previste altre operazioni?
« Ultima modifica: 14 Marzo 2012, 11:46:49 CET da Androi-dé! »

Offline Androi-dé!

  • Utente junior
  • **
  • Post: 62
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S4
  • Sistema operativo:
    Windows 7
Re:Errore Spinner
« Risposta #6 il: 15 Marzo 2012, 00:23:26 CET »
0
Raga ho messo un thanks a entrambi.
Per rispondere a bradipao.. sì c'erano dei commenti anche lì ma il problema era a monte derivato da un errore di distrazione dovuto alla stanchezza  :-X, comunque sia ho risolto con il suggerimento di eagledeveloper ossia chiamando i metodi dalla classe figlia (quella che estende).
Rimane comunque il fatto che non capisco l'utilità di una struttura di questo tipo, mi riferisco all'HomeActivity che fa un estends su DashboardActivity.
« Ultima modifica: 15 Marzo 2012, 08:09:20 CET da Androi-dé! »