Fairus Akbar
Fairus Akbar

Reputation: 19

How to calling Firestore Database in Fragment using FirebaseUi?

So I'm gonna calling my database from Firestore using Recycler View with FirebaseUi in my fragment but somehow every time I opened my app, the app stop working.

Here's my Fragment Contains Firestore Database.

public class Fragment_HomeSpot extends Fragment {
private FirebaseFirestore db = FirebaseFirestore.getInstance();
private CollectionReference spotRef = db.collection("Spot");
private SpotAdapter adapter;

@SuppressLint("ResourceType")

@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    return inflater.inflate(R.id.recyclerview_layout,container,false);
}

@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);


    setUpRecyclerView();
}


private void setUpRecyclerView() {

    Query query = spotRef.orderBy("",Query.Direction.DESCENDING);

    FirestoreRecyclerOptions<Spot> options = new FirestoreRecyclerOptions.Builder<Spot>()
            .setQuery(query, Spot.class)
            .build();

    adapter = new SpotAdapter(options);

    RecyclerView recyclerView = Objects.requireNonNull(getView()).findViewById(R.id.recyclerview_layout);
    recyclerView.setHasFixedSize(true);
    recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
    recyclerView.setAdapter(adapter);
}

@Override
public void onStart() {
    super.onStart();
    adapter.startListening();
}

@Override
public void onStop() {
    super.onStop();
    adapter.stopListening();
}
}

Upvotes: 1

Views: 902

Answers (1)

ianhanniballake
ianhanniballake

Reputation: 199825

onCreate() happens before onCreateView(), so when you call getView() in setUpRecyclerView(), you get null back - you haven't inflated the view yet.

Instead, you should put your setUpRecyclerView() method within onViewCreated(), at which time getView() will return the view you inflated in onCreateView():

@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
    setUpRecyclerView();
}

Upvotes: 1

Related Questions