0

I am programming in android studio and here is my code snippet :

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);
    }
}

I am getting

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

at line :

citySpinner.setAdapter(adapter)

Vadim Kotov
  • 8,084
  • 8
  • 48
  • 62
Natesh bhat
  • 12,274
  • 10
  • 84
  • 125

2 Answers2

3

You need to first inflate the xml file which has the view for your fragment in oncreateview.

Then use that view to do the findviewbyid:

view = inflater.inflate(R.layout.fragment_xml, container, false);
final Spinner citySpinner = (Spinner) view.findViewById(R.id.citySpinner);
Udit
  • 1,037
  • 6
  • 11
2

You need find the spinner in the View. try this in onCreateView method:

 @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;
    }
Bonestack
  • 81
  • 6