У меня есть два узла в моей базе данных. Один называется JOBS, а другой - USERS. Я хочу получить все задания, которые имеют тот же job_type , что и пользователи job_interests . Например, в этом случае пользователь Willow интересуется работой по уходу за питомцами и обучению. Я хочу, чтобы рабочие места, которые имеют тип Уход за домашними животными или обучение, были извлечены. В этом случае задание 1.
Это мой Узел задания:
Это мой Пользовательский узел:
Исходя из моих исследований, это возможно с использованием startAt и endAt функций. Я попробовал приведенный ниже код. Однако на экране ничего не отображается. Я новичок в android и firebase, так что я не уверен, что то, что я делаю, правильно. Помощь приветствуется, спасибо.
package com.example.oddsynew;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.Query;
import com.google.firebase.database.ValueEventListener;
import java.util.ArrayList;
public class RecommendedFragment extends Fragment {
DatabaseReference usersRef, jobsRef;
FirebaseAuth mAuth;
RecyclerView nearYouList;
ArrayList<Job> list;
HomeAdapter adapter;
Query query;
FirebaseUser u;
String userID, jobinterests, jobtype;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_recommended, container, false);
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
mAuth = FirebaseAuth.getInstance();
u = mAuth.getCurrentUser();
userID = u.getUid();
usersRef = FirebaseDatabase.getInstance().getReference("Users").child(userID);
jobsRef = FirebaseDatabase.getInstance().getReference("Jobs");
nearYouList = (RecyclerView) view.findViewById(R.id.nearYou);
nearYouList.setLayoutManager(new LinearLayoutManager(getActivity()));
list = new ArrayList<Job>();
adapter = new HomeAdapter(getActivity(), list);
nearYouList.setAdapter(adapter);
try {
jobsRef.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for (DataSnapshot ds : dataSnapshot.getChildren()) {
jobtype = ds.child("job_type").getValue(String.class);
Log.e("TAG", " " + jobtype);
query = usersRef.orderByChild("job_interests").startAt(jobtype).endAt(jobtype + "/uf8ff");
query.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
if (dataSnapshot.exists()) {
for (DataSnapshot ds : dataSnapshot.getChildren()) {
Job j = ds.getValue(Job.class);
list.add(j);
System.out.println(list);
}
adapter.notifyDataSetChanged();
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
Log.e("TAG", "LOL" + query);
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
} catch (IndexOutOfBoundsException e) {
e.printStackTrace();
}