2012-04-09 4 views
1

У меня проблема, очень неприятная проблема, и я совершенно не знаю, что вызывает ее! Я пытаюсь сделать приложение Android, способное читать XML-файл, добавляя некоторые данные из файла XML в ArrayList, а затем помещая ArrayList в Spinner. Вот часть моего класса Shortcut.Android: Force Закрыть открытие Spinner with 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 

Вот часть моего класса Scanner

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; 

    } 

я могу попасть в Activit сканер y, но когда я пытаюсь открыть Spinner, у меня получается сила, и это в логарифме.

04-09 17: 30: 56,452 D/AndroidRuntime (9980): Выключение ВМ 04-09 17: 30: 56.452: Вт/dalvikvm (9980): ThreadId = 1: поток, выходящий с неперехваченным Исключение (группа = 0x4001d7e8) 04-09 17: 30: 56.482: E/AndroidRuntime (9980): FATAL EXCEPTION: main 04-09 17: 30: 56.482: E/AndroidRuntime (9980): java.lang.NullPointerException 04-09 17: 30: 56.482: E/AndroidRuntime (9980): at 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): на android.widget.Spinner $ DropDownAda pter.getDropDownView (Spinner.java:329) 04-09 17: 30: 56.482: E/AndroidRuntime (9980): на android.widget.Spinner $ DropDownAdapter.getView (Spinner.java:325) 04-09 17: 30: 56.482: E/AndroidRuntime (9980): at 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): at android.widget.ListView.onMeasure (ListView.java:1109) 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): at android.view.ViewGroup.measureChildWithMargins (ViewGroup. java: 3132) 04-09 17: 30: 56.482: E/AndroidRuntime (9980): на android.widget.LinearLayout.measureChildBef oreLayout (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): at android.widget.LinearLayout.onMeasure (LinearLayout.java:304) 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): at android.view.ViewGroup.measureChildWithMargins (ViewGroup.java:3132) 04-09 17: 30: 56.482: E/AndroidRuntime (9980): at android.widget.LinearLayout.measureChildBeforeLayout (LinearLayout.java:1012) 04-09 17: 30: 56.482: E/AndroidRuntime (9980): at android.widget.LinearLayout.measureVertical (LinearLayout.java:381) 04-09 17: 30: 56.482: E/AndroidRuntime (9980): на android.widget.LinearLay out.onMeasure (LinearLayout.java:304) 04-09 17: 30: 56.482: E/AndroidRuntime (9980): at com.android.internal.widget.WeightedLinearLayout.onMeasure (WeightedLinearLayout.java:60) 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): at 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): at android.view.ViewGroup.measureChildWithMargins (ViewGroup.java:3132) 04-09 17: 30: 56.482: E/AndroidRuntime (9980): at 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): at android.view.ViewRoot.performTraversals (ViewRoot.java:801) 04-09 17: 30: 56.482: E/AndroidRuntime (9980): at android.view.ViewRoot.handleMessage (ViewRoot.java:1727) 04-09 17:30: 56.482: E/AndroidRuntime (9980): at android.os.Handler.dispatchMessage (Handler.java:99) 04-09 17: 30: 56.482: E/AndroidRuntime (9980): на android.os.Looper.loop (Looper.java:123) 04-09 17: 30: 56.482: E/AndroidRuntime (9980): at android.app.ActivityThread.main (ActivityThread.java:4627) 04-09 17: 30: 56.482: E/AndroidRuntime (9980): at java.lang.reflect.Method.invokeNative (собственный метод) 04-09 17: 30: 56.482: E/AndroidRuntime (9980): at java.lang.reflect.Method.invoke (Method.java : 521) 04-09 17: 30: 56.482: E/AndroidRuntime (9980): at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:858) 04-09 17: 30: 56.482 : E/AndroidRuntime (9980): at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:616) 04-09 17: 30: 56.482: E/AndroidRuntime (9980): у dalvik.syst em.NativeStart.main (родной метод)

Я не очень разбираюсь в логарифме, я новичок в Java. Я знаю, что проблема заключается в этом фрагменте кода; когда я удалю его, Spinner откроется и покажет мне «Пожалуйста, выберите категорию».

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

Но этот код кажется мне чистым, любая помощь пожалуйста? Спасибо за ваше время и помощь, я буду очень благодарен, зеокила.

ответ

1

Глядя на javadocparser.getName() может быть пустым:

Если текущее событие не START_TAG, END_TAG или ENTITY_REF, нуль возвращается.

Вы можете попробовать использовать это вместо: "name".equals(parser.getName()), чтобы он возвращал значение false, если parser.getName() равно null.

И int eventType = parser.getEventType(); должен, вероятно, находиться в вашем цикле while или его значение не будет обновляться при вызове parser.next();.

+0

Я отредактировал цикл while, мне пришлось добавить eventType = parser.getEventType(); выше parser.next(); Теперь он не заставляет закрывать, но он просто показывает, пожалуйста, выберите категорию, но не дополнительные данные в XML-файле, спасибо за вашу помощь, хотя данные не лучше, чем закрытие силы. –

+0

Но я предполагаю, что это еще одна проблема, вы решили использовать FC, thx –