为啥我在这里得到微调器的空引用错误? [复制]

Posted

技术标签:

【中文标题】为啥我在这里得到微调器的空引用错误? [复制]【英文标题】:Why am I getting null reference error for spinner here? [duplicate]为什么我在这里得到微调器的空引用错误? [复制] 【发布时间】:2018-12-08 20:06:32 【问题描述】:

我在 android studio 中编程,这是我的代码 sn-p :

public class settingsView extends Fragment 

    public settingsView() 
    

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) 

        final Spinner citySpinner = (Spinner) getActivity().findViewById(R.id.citySpinner);

        FirebaseDatabase.getInstance().getReference("/movies/karnataka").addValueEventListener(new ValueEventListener() 
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) 

                ArrayList<String> cityList = new ArrayList<>();

                for (DataSnapshot snapshot : dataSnapshot.getChildren()) 
                    cityList.add(snapshot.getKey());
                

                Log.d("firebasedata", cityList.toString());

                ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity().getApplicationContext(), android.R.layout.simple_spinner_item, cityList );
                adapter.setDropDownViewResource(android.R.layout.simple_spinner_item);
                citySpinner.setAdapter(adapter);
            

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) 
            
        );


        return inflater.inflate(R.layout.settingsview, container, false);
    

我来了

java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Spinner.setAdapter(android.widget.SpinnerAdapter) on a null object reference exception 

在线:

citySpinner.setAdapter(adapter)

【问题讨论】:

你不应该使用 getActivity().findViewById(R.id.citySpinner); 【参考方案1】:

您需要首先在 oncreateview 中为您的片段添加视图的 xml 文件。

然后使用该视图执行 findviewbyid:

view = inflater.inflate(R.layout.fragment_xml, container, false);
final Spinner citySpinner = (Spinner) view.findViewById(R.id.citySpinner);

【讨论】:

【参考方案2】:

您需要在视图中找到微调器。 在 onCreateView 方法中试试这个:

 @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) 

        View v = inflater.inflate(R.layout.settingsview, container, false);

        final Spinner citySpinner = (Spinner) v.findViewById(R.id.citySpinner); // you use it here


        return v;
    

【讨论】:

以上是关于为啥我在这里得到微调器的空引用错误? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

我在ComplexNumber.cpp中的一些方法得到一个奇怪的未定义的错误引用,虽然[复制]我对模板很新

为啥在通过 const 引用传递临时值时调用复制构造函数?

为啥函数没有得到动态数组? (我正在使用指针和引用)

为啥我在函数内部使用引用并通过引用返回它仍然有效? [复制]

为啥这段代码会给出“可能的空引用返回”编译器警告?

C: Cppcheck : 可能的空点取消引用