Autore Topic: Spinner su dati presi da DB  (Letto 753 volte)

Offline darkmax

  • Utente junior
  • **
  • Post: 62
  • Respect: 0
    • Mostra profilo
    • Emoe - Agenzia di comunicazione Torino
  • Dispositivo Android:
    Samsung Galaxy S 3
  • Sistema operativo:
    Mac OS X
Spinner su dati presi da DB
« il: 09 Maggio 2012, 11:06:07 CEST »
0
Ciao a tutti ragazzi,
dovrei creare uno Spinner partendo da dati presi da db..

Ho scritto questo codice:

Codice (Java): [Seleziona]
protected void onCreate(Bundle savedInstanceState) {
                // TODO Auto-generated method stub
                super.onCreate(savedInstanceState);
                setContentView(R.layout.remove_wf2);
                MyDatabase mDB = new MyDatabase(getApplicationContext());
               
                Spinner spin = (Spinner)findViewById(R.id.wf_spinner);
                Cursor cur = mDB.fetchWfs();
                startManagingCursor(cur);
               
                String[] from = new String[] { WfMetaData.WF_NAME_KEY };
                int[] to = new int[] { android.R.id.text1 };
                SimpleCursorAdapter spinAdapter = new SimpleCursorAdapter(this, android.R.layout.simple_spinner_item, cur, from, to);
                spinAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
                spin.setAdapter(spinAdapter);
               
                spin.setOnItemSelectedListener(new OnItemSelectedListener() {
                    @Override
                    public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
                        Cursor c = (Cursor)parent.getItemAtPosition(pos);
                        mSpinnerWF = c.getInt(c.getColumnIndexOrThrow(WfMetaData.WF_NAME_KEY));
                    }
                    @Override
                        public void onNothingSelected(AdapterView<?> parent) {
                    }
                });
               
        }

Questo il Logcat

Codice: [Seleziona]
05-09 11:00:36.137: E/AndroidRuntime(7141): FATAL EXCEPTION: main
05-09 11:00:36.137: E/AndroidRuntime(7141): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.tilab.wade.interactivity.android.client/com.tilab.wade.interactivity.android.client.RemoveWorkflow2}: java.lang.NullPointerException
05-09 11:00:36.137: E/AndroidRuntime(7141):         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1968)
05-09 11:00:36.137: E/AndroidRuntime(7141):         at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1993)
05-09 11:00:36.137: E/AndroidRuntime(7141):         at android.app.ActivityThread.access$600(ActivityThread.java:127)
05-09 11:00:36.137: E/AndroidRuntime(7141):         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1159)
05-09 11:00:36.137: E/AndroidRuntime(7141):         at android.os.Handler.dispatchMessage(Handler.java:99)
05-09 11:00:36.137: E/AndroidRuntime(7141):         at android.os.Looper.loop(Looper.java:137)
05-09 11:00:36.137: E/AndroidRuntime(7141):         at android.app.ActivityThread.main(ActivityThread.java:4507)
05-09 11:00:36.137: E/AndroidRuntime(7141):         at java.lang.reflect.Method.invokeNative(Native Method)
05-09 11:00:36.137: E/AndroidRuntime(7141):         at java.lang.reflect.Method.invoke(Method.java:511)
05-09 11:00:36.137: E/AndroidRuntime(7141):         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:790)
05-09 11:00:36.137: E/AndroidRuntime(7141):         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
05-09 11:00:36.137: E/AndroidRuntime(7141):         at dalvik.system.NativeStart.main(Native Method)
05-09 11:00:36.137: E/AndroidRuntime(7141): Caused by: java.lang.NullPointerException
05-09 11:00:36.137: E/AndroidRuntime(7141):         at com.tilab.wade.interactivity.android.client.MyDatabase.fetchWfs(MyDatabase.java:53)
05-09 11:00:36.137: E/AndroidRuntime(7141):         at com.tilab.wade.interactivity.android.client.RemoveWorkflow2.onCreate(RemoveWorkflow2.java:43)
05-09 11:00:36.137: E/AndroidRuntime(7141):         at android.app.Activity.performCreate(Activity.java:4465)
05-09 11:00:36.137: E/AndroidRuntime(7141):         at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1052)
05-09 11:00:36.137: E/AndroidRuntime(7141):         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1932)
05-09 11:00:36.137: E/AndroidRuntime(7141):         ... 11 more

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3487
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Spinner su dati presi da DB
« Risposta #1 il: 09 Maggio 2012, 12:20:15 CEST »
0
Codice: [Seleziona]
05-09 11:00:36.137: E/AndroidRuntime(7141): Caused by: java.lang.NullPointerException
05-09 11:00:36.137: E/AndroidRuntime(7141):         at com.tilab.wade.interactivity.android.client.MyDatabase.fetchWfs(MyDatabase.java:53)
05-09 11:00:36.137: E/AndroidRuntime(7141):         at com.tilab.wade.interactivity.android.client.RemoveWorkflow2.onCreate(RemoveWorkflow2.java:43)

C'è un NullPointerException nella classe MyDatabase alla riga 53. Se non sai cos'è, google :P

Offline darkmax

  • Utente junior
  • **
  • Post: 62
  • Respect: 0
    • Mostra profilo
    • Emoe - Agenzia di comunicazione Torino
  • Dispositivo Android:
    Samsung Galaxy S 3
  • Sistema operativo:
    Mac OS X
Re:Spinner su dati presi da DB
« Risposta #2 il: 09 Maggio 2012, 12:30:06 CEST »
0
Ho visto che c'è un NullPointerException.. ma non capisco qual è il motivo..

Ho creato un metodo separato ma non cambia nulla.. qui il codice e il file xml che ho creato insieme..

Codice (Java): [Seleziona]
public class RemoveWorkflow2 extends Activity {
       
        private EditText nameEditText;
        private EditText classEditText;
        Spinner spin;
       
        MyDatabase mDB;
       

        @Override
        protected void onCreate(Bundle savedInstanceState) {
                // TODO Auto-generated method stub
                super.onCreate(savedInstanceState);
                setContentView(R.layout.remove_wf2);
                MyDatabase mDB = new MyDatabase(getApplicationContext());
                spin = (Spinner)findViewById(R.id.wf_spinner);
               
                fillSpinner(spin);
               
                Button btn = (Button)findViewById(R.id.button11);
                btn.setText("Rimuovi");
                btn.setOnClickListener(new View.OnClickListener() {
                       
                        @Override
                        public void onClick(View v) {
                               
                               
                        }
                });
               
               
        }
       
        private void fillSpinner(Spinner s){
                 
                Cursor c = mDB.fetchWfs();
                startManagingCursor(c);
                 
                // create an array to specify which fields we want to display
                String[] from = new String[]{WfMetaData.WF_NAME_KEY};
                // create an array of the display item we want to bind our data to
                int[] to = new int[]{android.R.id.text1};
                // create simple cursor adapter
                SimpleCursorAdapter adapter =
                  new SimpleCursorAdapter(this, android.R.layout.simple_spinner_item, c, from, to );
                adapter.setDropDownViewResource( android.R.layout.simple_spinner_dropdown_item );
                // get reference to our spinner
                s.setAdapter(adapter);
                }
               

}

Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   android:orientation="vertical" >

    <TextView
       android:id="@+id/textView10"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:text="Scegli il workflow da eliminare: "
       android:gravity="center" />

   
    <Spinner
       android:id="@+id/wf_spinner"
       android:layout_width="match_parent"
       android:layout_height="wrap_content" />

    <Button
       android:id="@+id/button11"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_gravity="center_horizontal"
       android:text="Button" />

</LinearLayout>

E ancora il metodo fetchWfs..

Codice (Java): [Seleziona]
public Cursor fetchWfs(){ //metodo per fare la query di tutti i dati
            return mDb.query(WfMetaData.WF_TABLE, null,null,null,null,null,null);              
    }

Offline darkmax

  • Utente junior
  • **
  • Post: 62
  • Respect: 0
    • Mostra profilo
    • Emoe - Agenzia di comunicazione Torino
  • Dispositivo Android:
    Samsung Galaxy S 3
  • Sistema operativo:
    Mac OS X
Re:Spinner su dati presi da DB
« Risposta #3 il: 09 Maggio 2012, 12:37:41 CEST »
0
Mi sono accorto che fetchWfs era dichiarato prima della dichiarazione della tabella.. Ora l'ho sistemato ma mi da un'altra NullPointerException.. questa volta su fillSpinner.. Questo il Logcat:

Codice: [Seleziona]
05-09 12:35:49.908: E/AndroidRuntime(17385): FATAL EXCEPTION: main
05-09 12:35:49.908: E/AndroidRuntime(17385): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.tilab.wade.interactivity.android.client/com.tilab.wade.interactivity.android.client.RemoveWorkflow2}: java.lang.NullPointerException
05-09 12:35:49.908: E/AndroidRuntime(17385):         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1968)
05-09 12:35:49.908: E/AndroidRuntime(17385):         at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1993)
05-09 12:35:49.908: E/AndroidRuntime(17385):         at android.app.ActivityThread.access$600(ActivityThread.java:127)
05-09 12:35:49.908: E/AndroidRuntime(17385):         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1159)
05-09 12:35:49.908: E/AndroidRuntime(17385):         at android.os.Handler.dispatchMessage(Handler.java:99)
05-09 12:35:49.908: E/AndroidRuntime(17385):         at android.os.Looper.loop(Looper.java:137)
05-09 12:35:49.908: E/AndroidRuntime(17385):         at android.app.ActivityThread.main(ActivityThread.java:4507)
05-09 12:35:49.908: E/AndroidRuntime(17385):         at java.lang.reflect.Method.invokeNative(Native Method)
05-09 12:35:49.908: E/AndroidRuntime(17385):         at java.lang.reflect.Method.invoke(Method.java:511)
05-09 12:35:49.908: E/AndroidRuntime(17385):         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:790)
05-09 12:35:49.908: E/AndroidRuntime(17385):         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
05-09 12:35:49.908: E/AndroidRuntime(17385):         at dalvik.system.NativeStart.main(Native Method)
05-09 12:35:49.908: E/AndroidRuntime(17385): Caused by: java.lang.NullPointerException
05-09 12:35:49.908: E/AndroidRuntime(17385):         at com.tilab.wade.interactivity.android.client.RemoveWorkflow2.fillSpinner(RemoveWorkflow2.java:82)
05-09 12:35:49.908: E/AndroidRuntime(17385):         at com.tilab.wade.interactivity.android.client.RemoveWorkflow2.onCreate(RemoveWorkflow2.java:44)
05-09 12:35:49.908: E/AndroidRuntime(17385):         at android.app.Activity.performCreate(Activity.java:4465)
05-09 12:35:49.908: E/AndroidRuntime(17385):         at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1052)
05-09 12:35:49.908: E/AndroidRuntime(17385):         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1932)

Offline darkmax

  • Utente junior
  • **
  • Post: 62
  • Respect: 0
    • Mostra profilo
    • Emoe - Agenzia di comunicazione Torino
  • Dispositivo Android:
    Samsung Galaxy S 3
  • Sistema operativo:
    Mac OS X
Re:Spinner su dati presi da DB
« Risposta #4 il: 09 Maggio 2012, 14:29:28 CEST »
0
qualcuno mi può dare una mano?

Offline Eu4ia

  • Utente junior
  • **
  • Post: 93
  • Respect: +16
    • Mostra profilo
  • Play Store ID:
    Eu4ia
  • Sistema operativo:
    Ubuntu 11.10 + Windows 7
Re:Spinner su dati presi da DB
« Risposta #5 il: 23 Maggio 2012, 00:55:57 CEST »
0
Up

Ciao anche io sto picchiando la testa in una situazione simile alla tua.
Io sono nella condizione che lo spinner, dopo il click mi mostra il DropDown con il numero corretto di elementi ma non leggibili, proprio righe bianche col selettore a destra ben visibile.
Se ne scelgo uno a caso viene valorizzato correttamente lo spinner ma non ho ancora verificato se riesco ad intercettare l'id desiderato.

Qualcuno ci aiuti  :'(
Se ti sono stato utile premi "Thanks" ;-)

Offline fieraf

  • Utente junior
  • **
  • Post: 88
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Galaxy s 2
  • Sistema operativo:
    windows 7
Re:Spinner su dati presi da DB
« Risposta #6 il: 04 Giugno 2012, 12:43:40 CEST »
0
ciao
no so se ti puo aitare.
io ho caricato uno spinner che come elementi ha i nomi di file presenti in una cartella.
potresti seguire la stessa logica per usare un db.
la chaive di tutto sono gli adapter
Codice (Java): [Seleziona]
           public void CaricaSpinnerDB(Spinner spinner,ArrayAdapter<ObjetosClase> adapter3){
                    spinner1.setAdapter(null);
            LinkedList<ObjetosClase> databases1 = new LinkedList<ObjetosClase>();
                   File path=new File(pathfile);                         
                   String[] file=path.list();
                        //Creamos la lista
                    if (file!=null)     {      
                         for (String f:file){

                                         databases1.add(new ObjetosClase(1, f));

                         }     
                                adapter3 = new ArrayAdapter<ObjetosClase>(this, android.R.layout.simple_spinner_item, databases1);
                                adapter3.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
                                spinner.setAdapter(adapter3);      
              }
                 }
« Ultima modifica: 04 Giugno 2012, 12:45:43 CEST da fieraf »