2012-04-09 4 views
1

J'ai un problème, problème très ennuyeux, et je n'ai absolument aucune idée de ce qui le cause! J'essaie de faire une application Android capable de lire un fichier XML, en ajoutant des données du fichier XML à une ArrayList, puis en plaçant ArrayList dans un Spinner. Voici une partie de ma classe Raccourcis.Android: Spinner d'ouverture Close force avec ArrayList

Shortcuts.java

Spinner selection = (Spinner) findViewById(R.id.shortcutsSpinner); //Defining the Spinner 
     /*ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
       this, R.array.shortcut_selection, android.R.layout.simple_spinner_item); //Defining the items in the Spinner 
     adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
     selection.setAdapter(adapter); //Setting the items to the Spinner*/ 
     ArrayList<String> items; 
     try { 
      items = scanner.getCategorys(); 
     } catch (FileNotFoundException e) { 
      items = null; 
      e.printStackTrace(); 
     } catch (XmlPullParserException e) { 
      items = null; 
      e.printStackTrace(); 
     } catch (IOException e) { 
      items = null; 
      e.printStackTrace(); 
     } 
     @SuppressWarnings({ "unchecked", "rawtypes" }) 
     ArrayAdapter<CharSequence> adapter = new ArrayAdapter(this,android.R.layout.simple_spinner_item, items); 
     adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
     selection.setAdapter(adapter); 

     selection.setOnItemSelectedListener(new OnItemSelectedListener() { 

      public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, 
        long arg3) { 
       final String simulatorCommands = getString(R.string.Simulator_Commands); //Setting Shortcuts 
       final String controlSurfaceCommands = getString(R.string.Control_Surface_Commands); 
       TextView Text = (TextView)findViewById(R.id.shortcutsText); //Defining the TextView 
       Spinner selection = (Spinner) findViewById(R.id.shortcutsSpinner); //Defining the Spinner 

Voici une partie de ma classe Scanner

de Scanner.java

public ArrayList<String> getCategorys() throws XmlPullParserException, IOException { 
     ArrayList<String> categorys = new ArrayList<String>(); 
     categorys.add("Please select a category"); 
     //START ADDING HERE 
     XmlPullParserFactory factory = XmlPullParserFactory.newInstance(); 
     factory.setNamespaceAware(true); 
     XmlPullParser parser = factory.newPullParser(); 
     File file = new File(Environment.getExternalStorageDirectory()+ "/fsx_kneeboard/categories.xml"); 
     FileInputStream fis = new FileInputStream(file); 
     parser.setInput(new InputStreamReader(fis)); 
     parser.next(); 
     int eventType = parser.getEventType(); 
     while (eventType != XmlPullParser.END_DOCUMENT) { 
      if (eventType == XmlPullParser.START_TAG && parser.getName().equals("name")) { 
       categorys.add(parser.getText()); 
      } 
      parser.next(); 
      eventType = parser.getEventType(); 
     } 
     return categorys; 

    } 

Je peux entrer dans le Activit du scanner y, mais quand j'essaie d'ouvrir le Spinner, j'obtiens une force proche, et ceci dans le logcat.

04-09 17: 30: 56,452: D/AndroidRuntime (9980): Arrêt VM 9/4 17: 30: 56,452: W/dalvikvm (9980): threadid = 1: fil sortant avec uncaught exception (groupe = 0x4001d7e8) 04-09 17: 30: 56.482: E/AndroidRuntime (9980): FATAL EXCEPTION: principal 04-09 17: 30: 56.482: E/AndroidRuntime (9980): java.lang.NullPointerException 04-09 17: 30: 56.482: E/AndroidRuntime (9980): à android.widget.ArrayAdapter.createViewFromResource (ArrayAdapter.java:355) 04-09 17: 30: 56.482: E/AndroidRuntime (9980): à android .widget.ArrayAdapter.getDropDownView (ArrayAdapter.java:376) 04-09 17: 30: 56.482: E/AndroidRuntime (9980): sur android.widget.Spinner $ DropDownAda pter.getDropDownView (Spinner.java:329) 04-09 17: 30: 56.482: E/AndroidRuntime (9980): à l'adresse android.widget.Spinner $ DropDownAdapter.getView (Spinner.java:325) 04-09 17: 30: 56.482: E/AndroidRuntime (9980): à android.widget.AbsListView.obtainView (AbsListView.java:1294) 04-09 17: 30: 56.482: E/AndroidRuntime (9980): à android.widget.ListView. measureHeightOfChildren (ListView.java:1198) 04-09 17: 30: 56.482: E/AndroidRuntime (9980): à l'adresse android.widget.ListView.onMeasure (ListView.java:1109) 04-09 17: 30: 56.482: E/AndroidRuntime (9980): à l'adresse android.view.View.measure (View.java:8171) 04-09 17: 30: 56.482: E/AndroidRuntime (9980): à android.view.ViewGroup.measureChildWithMargins (ViewGroup. java: 3132) 04-09 17: 30: 56.482: E/AndroidRuntime (9980): sur android.widget.LinearLayout.measureChildBef oreLayout (LinearLayout.java:1012) 04-09 17: 30: 56.482: E/AndroidRuntime (9980): à l'adresse android.widget.LinearLayout.measureVertical (LinearLayout.java:381) 04-09 17: 30: 56.482: E/AndroidRuntime (9980): à android.widget.LinearLayout.onMeasure (LinearLayout.java:304) 04-09 17: 30: 56.482: E/AndroidRuntime (9980): à android.view.View.measure (Voir. java: 8171) 04-09 17: 30: 56.482: E/AndroidRuntime (9980): à android.view.ViewGroup.measureChildWithMargins (ViewGroup.java:3132) 04-09 17: 30: 56.482: E/AndroidRuntime (9980): à android.widget.LinearLayout.measureChildBeforeLayout (LinearLayout.java:1012) 04-09 17: 30: 56.482: E/AndroidRuntime (9980): à android.widget.LinearLayout.measureVertical (LinearLayout.java:381) 04-09 17: 30: 56.482: E/AndroidRuntime (9980): sur android.widget.LinearLay out.onMeasure (LinearLayout.java:304) 04-09 17: 30: 56.482: E/AndroidRuntime (9980): à com.android.internal.widget.WeightedLinearLayout.onMeasure (WeightedLinearLayout.java:60) 04-09 17: 30: 56.482: E/AndroidRuntime (9980): à l'adresse android.view.View.measure (View.java:8171) 04-09 17: 30: 56.482: E/AndroidRuntime (9980): sur android.view. ViewGroup.measureChildWithMargins (ViewGroup.java: 3132) 04-09 17: 30: 56.482: E/AndroidRuntime (9980): à l'adresse android.widget.FrameLayout.onMeasure (FrameLayout.java:245) 04-09 17: 30: 56.482: E/AndroidRuntime (9980): at android.view.View.measure (View.java:8171) 04-09 17: 30: 56.482: E/AndroidRuntime (9980): à android.view.ViewGroup.measureChildWithMargins (ViewGroup.java:3132) 04-09 17: 30: 56.482: E/AndroidRuntime (9980): à l'adresse android.widget.FrameLayout.onMeasure (FrameLayout.java:245) 04-09 17: 30: 56.482: E/AndroidRuntime (9980): at android.view.View.measure (View.java:8171) 04-09 17: 30: 56.482: E/AndroidRuntime (9980): à l'adresse android.view.ViewRoot.performTraversals (ViewRoot.java:801) 04-09 17: 30: 56.482: E/AndroidRuntime (9980): à l'adresse android.view.ViewRoot.handleMessage (ViewRoot.java:1727) 04-09 17:30: 56.482: E/AndroidRuntime (9980): à l'adresse android.os.Handler.dispatchMessage (Handler.java:99) 04-09 17: 30: 56.482: E/AndroidRuntime (9980): at android.os.Looper.loop (Looper.java:123) 04-09 17: 30: 56.482: E/AndroidRuntime (9980): à l'adresse android.app.ActivityThread.main (ActivityThread.java:4627) 04-09 17: 30: 56.482: E/AndroidRuntime (9980): à java.lang.reflect.Method.invokeNative (méthode native) 04-09 17: 30: 56.482: E/AndroidRuntime (9980): à java.lang.reflect.Method.invoke (Method.java : 521) 04-09 17: 30: 56.482: E/AndroidRuntime (9980): à l'adresse com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:858) 04-09 17: 30: 56.482 : E/AndroidRuntime (9980): à com.android.internal.os.ZygoteInit.main (ZygoteInit.java:616) 04-09 17: 30: 56.482: E/AndroidRuntime (9980): à dalvik.syst em.NativeStart.main (méthode native)

Je ne comprends pas beaucoup le logcat, je suis nouveau à Java. Je sais que le problème est dans ce morceau de code; quand je le supprime, le Spinner s'ouvre et fonctionne en me montrant 'Veuillez sélectionner une catégorie'.

while (eventType != XmlPullParser.END_DOCUMENT) { 
      if (eventType == XmlPullParser.START_TAG && parser.getName().equals("name")) { 
       categorys.add(parser.getText()); 
      } 
      parser.next(); 
      eventType = parser.getEventType(); 
     } 

Mais ce code me semble propre, n'importe quelle aide s'il vous plaît? Merci pour le temps et l'aide, je serai très reconnaissant, zeokila.

Répondre

1

En regardant le javadocparser.getName() pourrait être nulle:

Si l'événement en cours est pas START_TAG, END_TAG ou ENTITY_REF, null est retourné.

Vous pouvez utiliser ceci à la place: "name".equals(parser.getName()) afin qu'il renvoie false si parser.getName() est null.

Et int eventType = parser.getEventType(); devrait probablement être dans votre boucle while ou sa valeur ne sera pas mise à jour lorsque vous appelez parser.next();.

+0

J'ai édité la boucle while, j'ai dû ajouter eventType = parser.getEventType(); au-dessus de parser.next(); Maintenant, il ne force pas fermer, mais il montrera simplement s'il vous plaît sélectionnez une catégorie, mais pas les données supplémentaires dans le fichier XML, merci pour votre aide si, aucune donnée n'est meilleure que la force se ferme. –

+0

Mais je suppose que c'est un autre problème, vous avez résolu le FC, merci –