2012-04-09 32 views
1

私は問題があり、非常に迷惑な問題があり、何が原因であるか全く分かりません。私はXMLファイルを読み込み、XMLファイルからいくつかのデータをArrayListに追加してから、ArrayListをSpinnerに入れることができるAndroidアプリケーションを作成しようとしています。ここに私のショートカットクラスの一部です。ここでAndroid:強制終了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クラスの一部私はスキャナactivitに取得することができます

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; 

    } 

ですy。でも、私がスピナーを開こうとすると、私は近くの力を得て、これをログキャットに入れます。

04-09 17:30:56.452:D/AndroidRuntime(9980):30:56.452:VM 04-09 17をシャットダウン/ W dalvikvm(9980):スレッドID = 1:スレッドは、キャッチされないで終了例外(グループ= 0x4001d7e8) 04-09 17:30:56.482:E/AndroidRuntime(9980):致命的な例外:メイン 04-09 17:30:56.482:E/AndroidRuntime(9980):java.lang.NullPointerException 04/17 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):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):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):android.widget.ListView.onMeasure(ListView.java:1109) 04-09 17:30:56.482: E/AndroidRuntime(9980):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):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):android.widget.LinearLayout.onMeasure(LinearLayout.java:304) 04-09 17:30:56.482:E/AndroidRuntime(9980):android.view.View.measure(ビュー。 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):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):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):android.widget.FrameLayout.onMeasure(FrameLayout.java:245) 04-09 17:30:56.482:E/AndroidRuntime 9980):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):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.ViewRoot.performTraversals(ViewRoot.java:801) 04-09 17:30:56.482:E/AndroidRuntime(9980):android.view.ViewRoot.handleMessage(ViewRoot.java:1727) 04-09 17:30: AndroidRuntime(9980):android.os.Looper.loop(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):android.app.ActivityThread.main(ActivityThread.java:4627) 04-09 17:30:56.482:E/AndroidRuntime(9980):java.lang.reflect.Method.invokeNative(ネイティブメソッド) 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):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):at dalvik.syst em.NativeStart.main(ネイティブメソッド)

私はlogcatをよく理解していません。私は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()を見てみると、nullが考えられます。

現在のイベントは、nullが返されSTART_TAG、END_TAG、またはENTITY_REF、されていない場合。

あなたはこの代わりに使用して試みることができる:parser.getName()がnullの場合はfalseを返し"name".equals(parser.getName())ように。

int eventType = parser.getEventType();はwhileループに含まれているか、parser.next();を呼び出すと値が更新されません。

+0

私はwhileループを編集しました。私はeventType = parser.getEventType();を追加しなければなりませんでした。上記のparser.next(); これは強制終了しませんが、カテゴリを選択してください。XMLファイルの余分なデータは表示されません。ご協力いただきありがとうございます。強制終了以外のデータはありません。 –

+0

しかし、私は別の問題があると思います。あなたはFCを解決しました。 –

関連する問題