java - spinner.setAdapter(适配器) 导致 "A resource was acquired at attached stack trace but never released"错误并应用程序强制关闭

标签 java android nullpointerexception

我正在尝试使用 ArrayAdapter 和 spinner.setAdapter(adapter) 更改微调器中的项目

此代码在选择侧边栏项目时运行,更改微调器中的值

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    if (mDrawerToggle.onOptionsItemSelected(item)) {
        String Tag = "Navigation drawer";
        Log.v(Tag, "Drawer item toggled");

        Spinner spinner = (Spinner) getView().findViewById(R.id.inputSpinner);
        //Get view must be used in order to use findViewById inside a fragment
        ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(getActivity().getApplicationContext(), //getActivity gets the correct context for me
                R.array.area_units_array, android.R.layout.simple_spinner_item);
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); //Tells the adapter what layout to use
        spinner.setAdapter(adapter);

        return true;
    }

    return super.onOptionsItemSelected(item);
}

抛出的错误如下

06-21 19:44:09.688    4715-4715/? E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.anapp.tpb.sidebarproject, PID: 4715
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Spinner.setAdapter(android.widget.SpinnerAdapter)' on a null object reference
        at com.anapp.tpb.sidebarproject.NavigationDrawerFragment.onOptionsItemSelected(NavigationDrawerFragment.java:272)
        at android.app.Fragment.performOptionsItemSelected(Fragment.java:2159)
        at android.app.FragmentManagerImpl.dispatchOptionsItemSelected(FragmentManager.java:1988)
        at android.app.Activity.onMenuItemSelected(Activity.java:2888)
        at com.android.internal.widget.ToolbarWidgetWrapper$1.onClick(ToolbarWidgetWrapper.java:182)
        at android.view.View.performClick(View.java:4780)
        at android.view.View$PerformClick.run(View.java:19866)
        at android.os.Handler.handleCallback(Handler.java:739)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:135)
        at android.app.ActivityThread.main(ActivityThread.java:5257)
        at java.lang.reflect.Method.invoke(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:372)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
--------- beginning of system

我已经阅读了其他人的 NullPointer 异常,我可以看到它来自行 Spinner spinner = (Spinner) getView().findViewById(R.id.inputSpinner); 但我不知道为什么。微调器“inputSpinner”存在。

如果这个问题有明显的答案,我深表歉意。我刚刚完成 GCSE 考试,在此之前我只真正使用过 Python。 Java 对我来说相对较新,所以我正在制作一个简单的单位转换器应用程序。

最佳答案

尝试更改 Spinner spinner = (Spinner) getView().findViewById(R.id.inputSpinner);

Spinner spinner = (Spinner) findViewById(R.id.inputSpinner);

因为您使用 (Spinner) 将其转换为 Spinner View 并且知道 ViewID,所以无需调用 getView() 然后使用 ID。

不确定这是否能解决问题。

此外,仅使用 getApplicationContext(),同样无需从 Activity 获取应用程序上下文。独立使用 getActivity() (或 getApplicationContext())。

PS:Google Docs是惊人的!使用它们!

关于java - spinner.setAdapter(适配器) 导致 "A resource was acquired at attached stack trace but never released"错误并应用程序强制关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30968653/

相关文章:

java - 从数据库中的预定义值列表中存储值的最佳方法是什么?

java - 关于Java网页表示的一个问题

android - 错误 : No resource identifier found for attribute 'layout_alignStart'

android - 如何应用主题特定的样式?

android - 在 map fragment 上叠加自动完成 fragment

java - getApplicationContext 导致 NullPointerException

java - ANDROID - RadioButton Switch 或 IF 如何使用?

java - Mule 线程池大小上限

java - NullPointerException 尽管 fx :id and fx:controller are correct

java - 在 jar 中加载字体作为资源失败