【问题标题】:spinner & adapter error: on a null object reference微调器和适配器错误:在空对象引用上
【发布时间】:2020-03-18 07:52:09
【问题描述】:

晚上好,
所以我不知道。我收到
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Spinner.setAdapter(android.widget.SpinnerAdapter)' on an null object reference
基本上我知道空对象引用意味着没有分配某些东西(是的,我是编程新手!)。

        Spinner spinner = findViewById(R.id.spinner1);
    ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this, R.array.palWerte, android.R.layout.simple_spinner_item);
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    spinner.setAdapter(adapter); //here the error happens
    spinner.setOnItemSelectedListener(this);

[...]

    @Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
    switch (item.getItemId()) {
        case R.id.nav_kaz:
            getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,
                    new KalorienzählerFragment()).commit();
            break;
        case R.id.nav_kar:
            getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,
                    new KalorienrechnerFragment()).commit();
            break;
        case R.id.nav_erp:
            getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,
                    new ErnährungsplanFragment()).commit();
            break;
        case R.id.nav_trp:
            getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,
                    new TrainingsplanFragment()).commit();
            break;
        case R.id.nav_trh:
            getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,
                    new TrainingshilfeFragment()).commit();
            break;
        case R.id.nav_ala:
            getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,
                    new AlarmFragment()).commit();
            break;
    }
    drawer.closeDrawer(GravityCompat.START);
    return true;
}

【问题讨论】:

标签: android spinner adapter


【解决方案1】:

看起来findViewById(R.id.spinner1); 正在返回null。 请尝试在您的活动中检查setContentView 函数中的布局,您的Spinner 必须在ID 为“@+id/spinner1”的布局中定义

【讨论】:

  • Spinner 被定义为带有“..=@+id/...”的 spinner1。 setContentView 到底是什么意思?对不起,我是新人,我不完全理解..
  • 在 onCreate 函数中的 Activity 中,您必须调用 setContentView(R.layout.***) 将 Activity 与布局绑定(*** - 定义微调器的布局名称)
  • 所以我添加了 setContentView(R.layout.fragment_kalorienrechner); 但错误还是一样
  • 你的函数必须看起来像这样 @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.fragment_kalorienrechner); } 但我看到您的布局名称包含片段,如果您的代码在片段中,那么我们必须在您的片段中写入类似这样的内容 public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.fragment_kalorienrechner , 容器, 假); }
  • 好的,问题是:我已经有一个导航抽屉,所以它看起来像这样:@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //setContentView(R.layout.fragment_kalorienrechner); setContentView(R.layout.activity_main); //我应该怎么办?因为没有 setContentView(R.layout.activity_main); 应用程序也会崩溃,如果我同时编写了它们当然这也不起作用。
【解决方案2】:

可能你使用了错误的文件。检查你有微调器的位置以及你尝试设置适配器的位置。 例如微调器存在于settings_activity.xml,但您尝试在main_activity.java 中设置适配器

【讨论】:

    【解决方案3】:

    您的代码:Spinner spinner = findViewById(R.id.spinner1);

    这应该是Spinner spinner = (Spinner)findViewById(R.id.spinner1);

    或者如果它在一个片段中

    builder.setView(fragmentView);
    
    (Spinner)fragmentView.findViewById(R.id.spinner1);
    

    希望对您有所帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-03
      • 2020-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多