【问题标题】:Android: Force Close opening Spinner with ArrayListAndroid:使用 ArrayList 强制关闭打开 Spinner
【发布时间】:2012-04-21 23:18:24
【问题描述】:

我有一个问题,非常烦人的问题,我完全不知道是什么原因造成的!我正在尝试制作一个能够读取 XML 文件的 Android 应用程序,将 XML 文件中的一些数据添加到 ArrayList,然后将 ArrayList 放入 Spinner。这是我的快捷方式课程的一部分。

快捷方式.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;

    }

我可以进入 Scanner 活动,但是当我尝试打开 Spinner 时,我会强制关闭,这在 logcat 中。

04-09 17:30:56.452: D/AndroidRuntime(9980): 关闭 VM 04-09 17:30:56.452: W/dalvikvm(9980): threadid=1: 线程以未捕获的异常退出 (group=0x4001d7e8) 04-09 17:30:56.482:E/AndroidRuntime(9980):致命异常:主要 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): 在 android.widget.Spinner$DropDownAdapter.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.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.LinearLayout.onMeasure(LinearLayout.java:304) 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.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.LinearLayout.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): 在 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:56.482: E/AndroidRuntime(9980): 在 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): 在 android.app.ActivityThread.main(ActivityThread.java:4627) 04-09 17:30:56.482: E/AndroidRuntime(9980): 在 java.lang.reflect.Method.invokeNative(Native Method) 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.system.NativeStart.main(Native Method)

我不太了解 logcat,我是 Java 新手。我知道问题出在这段代码中;当我删除它时,微调器会打开并显示“请选择一个类别”。

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

但是那段代码对我来说似乎很干净,有什么帮助吗?感谢您的时间和帮助,我将非常感激,zeokila。

【问题讨论】:

    标签: android arraylist xml-parsing android-spinner


    【解决方案1】:

    查看javadoc parser.getName() 可能为空:

    如果当前事件不是 START_TAG、END_TAG 或 ENTITY_REF,则返回 null。

    您可以尝试改用:"name".equals(parser.getName()),这样如果parser.getName() 为空,它就会返回 false。

    int eventType = parser.getEventType(); 可能应该在您的 while 循环中,否则当您调用 parser.next(); 时它的值不会更新。

    【讨论】:

    • 我编辑了 while 循环,我必须添加 eventType = parser.getEventType();上面 parser.next();现在它不会强制关闭,但它只会显示请选择一个类别,而不是 XML 文件中的额外数据,不过感谢您的帮助,没有数据比强制关闭更好。
    猜你喜欢
    • 2013-11-18
    • 1970-01-01
    • 1970-01-01
    • 2014-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多