как получить указанных c пользователей в свайп refre sh макет - PullRequest
0 голосов
/ 25 февраля 2020

Я создаю приложение для вступления в брак и использую Firebase в качестве базы данных, в которой первый фрагмент представляет собой профиль поиска. В профиле поиска отображаются все профили из базы данных, могут ли они быть мужскими или женскими, но я хочу показать мужские профили для пользователей женского пола и наоборот. И каждый пользователь является аутентифицированным пользователем. Я пробовал разные запросы, но не смог. Пожалуйста, помогите разобраться в проблеме.

Это пользователи в firebase:

These are users in firebase

Эти поля у каждого пользователя:

These are the fields in every user

Ниже приведен код для профиля поиска:

public class Search_fragment extends Fragment {

    private SwipeRefreshLayout mSwipeRefreshLayout;
    DatabaseReference databaseReference;
    Firebase firebase;
   // List<User> list = new ArrayList<User>();
    RecyclerView recyclerView;
    Boolean isScrolling = false;
    Context context;
    FirebaseAuth mAuth;

    Button filter;
    FirebaseRecyclerPagingAdapter<User, UserViewHolder> adapter;
    User user10=new User();
    FirebaseUser firebaseUser;

    public Search_fragment() {
    }

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

        final View view =  inflater.inflate(R.layout.search__profile, container, false);

        ((AppCompatActivity) getActivity()).getSupportActionBar().hide();

        String authgender=user10.getGender();


        filter=(Button)view.findViewById(R.id.button9);
        filter.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent it=new Intent(getActivity(),FilterMain.class);
                startActivity(it);
            }
        });

        mSwipeRefreshLayout =view.findViewById(R.id.swipe_refresh_layout);
        recyclerView = (RecyclerView)view.findViewById(R.id.recycler_view);
        recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));


        databaseReference = FirebaseDatabase.getInstance().getReference().child("User");
        PagedList.Config config = new PagedList.Config.Builder()
                .setEnablePlaceholders(false)
                .setPrefetchDistance(2)
                .setPageSize(1)
                .build();


        DatabasePagingOptions<User> options = new DatabasePagingOptions.Builder<User>()
                .setLifecycleOwner(this)
                .setQuery(databaseReference, config, User.class)
                .build();

        adapter = new FirebaseRecyclerPagingAdapter<User, UserViewHolder>(options) {
            @NonNull
            @Override
            public UserViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
                return new UserViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.recycler, parent, false),context) {
                };
            }
            @Override
            protected void onBindViewHolder(@NonNull final UserViewHolder viewHolder, final int i, @NonNull final User user) {

                viewHolder.setItem(user, i);


                int newPosition = viewHolder.getAdapterPosition();

            }
            @Override
            protected void onLoadingStateChanged(@NonNull LoadingState state) {
                switch (state) {
                    case LOADING_INITIAL:
                    case LOADING_MORE:
                        // Do your loading animation
                        mSwipeRefreshLayout.setRefreshing(true);
                        break;

                    case LOADED:
                        // Stop Animation
                        mSwipeRefreshLayout.setRefreshing(false);
                        break;

                    case FINISHED:
                        //Reached end of Data set
                        mSwipeRefreshLayout.setRefreshing(false);
                        break;

                    case ERROR:
                        retry();
                        break;
                }
            }
            @Override
            protected void onError(@NonNull DatabaseError databaseError) {
                super.onError(databaseError);
                mSwipeRefreshLayout.setRefreshing(false);
                databaseError.toException().printStackTrace();
                // Handle Error
                retry();
            }
        };
        recyclerView.setAdapter(adapter);
        mSwipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
            @Override
            public void onRefresh() {
                adapter.refresh();
            }
        });
return view;
    }
}

Ниже приведен код для UserViewHolder:

class UserViewHolder extends RecyclerView.ViewHolder {

    DatabaseReference databaseReference;
    Firebase firebase;
    FirebaseAuth mAuth;
    List<User> MainImageUploadInfoList;
    ImageView imageView,invite;
    CircleImageView shortlist;
    public TextView FirstNameTextView;
    public TextView DateTextView;
    public TextView HeightTextView;
    public TextView EducationTextView;
    public TextView OccupationTextView;
    public TextView UserIDTextView;
    public Button send_invitation,shortlist_profile;
    public TextView income;
    public TextView city_state;
    public TextView hobbies;
    public TextView marital_status;
    public TextView family_members;
    public TextView mothers_name;
    public TextView fathers_name;
    public TextView fathers_occupation;
    public TextView mothers_occupation;
    public TextView gendertv;
    public CardView mCardView;
    String sluidgl,sluidtemp;
    public List<User> mUploads;
    int flag=0;
    HashSet<String> set=new HashSet<String>();

    User user=new User();
    private final Context context;
    // private Object Context;

    public UserViewHolder(@NonNull final View itemView, final Context context) {
        super(itemView);
        this.context=context;

        itemView.setTag(user.getUser_id());
        mCardView = (CardView) itemView.findViewById(R.id.cardview1);
        FirstNameTextView = (TextView) itemView.findViewById(R.id.textView1);
        DateTextView = (TextView) itemView.findViewById(R.id.textView3);
        HeightTextView = (TextView) itemView.findViewById(R.id.textView4);
        EducationTextView = (TextView) itemView.findViewById(R.id.textView5);
        OccupationTextView = (TextView) itemView.findViewById(R.id.textView6);
        UserIDTextView = (TextView) itemView.findViewById(R.id.textView7);
        income = (TextView) itemView.findViewById(R.id.income);
        city_state = (TextView) itemView.findViewById(R.id.city_state);
        hobbies = (TextView) itemView.findViewById(R.id.hobbies);
        marital_status = (TextView) itemView.findViewById(R.id.marital_status);
        family_members = (TextView) itemView.findViewById(R.id.family_members);
        mothers_name = (TextView) itemView.findViewById(R.id.mothers_name);
        fathers_name = (TextView) itemView.findViewById(R.id.fathers_name);
        fathers_occupation = (TextView) itemView.findViewById(R.id.fathers_occupation);
        mothers_occupation = (TextView) itemView.findViewById(R.id.mothers_occupation);
        gendertv = (TextView) itemView.findViewById(R.id.gender);
        imageView=(ImageView)itemView.findViewById(R.id.imageView2);
        shortlist=(CircleImageView)itemView.findViewById(R.id.shortlisted);
        invite=(ImageView)itemView.findViewById(R.id.invite);

 mCardView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                int i = (int) itemView.getTag();

                for(i=0;i<=0;i++){
                    final Intent it = new Intent(v.getContext(), ViewProfile.class);
                    it.putExtra("first_name", FirstNameTextView.getText().toString());
                    it.putExtra("date", DateTextView.getText().toString());
                    it.putExtra("height", HeightTextView.getText().toString());
                    it.putExtra("city_state", city_state.getText().toString());
                    it.putExtra("hobbies", hobbies.getText().toString());
                    it.putExtra("highest_education", EducationTextView.getText().toString());
                    it.putExtra("occupation", OccupationTextView.getText().toString());
                    it.putExtra("income", income.getText().toString());
                    it.putExtra("marital_status", marital_status.getText().toString());
                    it.putExtra("family_members", family_members.getText().toString());
                    it.putExtra("fathers_name", fathers_name.getText().toString());
                    it.putExtra("mothers_name", mothers_name.getText().toString());
                    it.putExtra("fathers_occupation", fathers_occupation.getText().toString());
                    it.putExtra("mothers_occupation", mothers_occupation.getText().toString());
                    it.putExtra("user_id", UserIDTextView.getText().toString());
                    imageView.buildDrawingCache();
                    Bitmap bitmap = imageView.getDrawingCache();
                    it.putExtra("profile_image",bitmap);
                    it.putExtra("positionGroup", i);
                    itemView.getContext().startActivity(it);
                }
            }
        });
    }
    public void setItem(final User user, final int i){
mCardView.setTag(i);
                    FirstNameTextView.setText(user.getFirst_name() + " " + user.getLast_name());
                    DateTextView.setText(user.getDate());
                    HeightTextView.setText(user.getHeight());
                    EducationTextView.setText(user.getHighest_education());
                    OccupationTextView.setText(user.getOccupation());
                    UserIDTextView.setText(user.getUser_id());
                    income.setText(user.getIncome());
                    city_state.setText(user.getCity_state());
                    hobbies.setText(user.getHobbies());
                    marital_status.setText(user.getMarital_status());
                    family_members.setText(user.getFamily_members());
                    mothers_name.setText(user.getMothers_name());
                    fathers_name.setText(user.getFathers_name());
                    fathers_occupation.setText(user.getFathers_occupation());
                    mothers_occupation.setText(user.getMothers_occupation());
                    gendertv.setText(user.getGender());
                    Picasso.get().load(user.getMainImage()).placeholder(R.mipmap.ic_launcher).fit().into(imageView);
  }
}

РЕДАКТИРОВАТЬ:

W/PersistentConnection: pc_0 - Using an unspecified index. Your data will be downloaded and filtered on the client. Consider adding '".indexOn": "gender"' at User/User to your security and Firebase Database rules for better performance
W/System.err: com.google.firebase.database.DatabaseException: Firebase Database error: Data not found at given child path!
        at com.google.firebase.database.DatabaseError.toException(com.google.firebase:firebase-database@@19.2.1:229)
W/System.err:     at accentra.in.Search_fragment$2.onError(Search_fragment.java:142)
        at com.shreyaspatil.firebase.recyclerpagination.FirebaseRecyclerPagingAdapter$4.onChanged(FirebaseRecyclerPagingAdapter.java:76)
W/System.err:     at com.shreyaspatil.firebase.recyclerpagination.FirebaseRecyclerPagingAdapter$4.onChanged(FirebaseRecyclerPagingAdapter.java:73)
        at androidx.lifecycle.LiveData.considerNotify(LiveData.java:131)
        at androidx.lifecycle.LiveData.dispatchingValue(LiveData.java:149)
W/System.err:     at androidx.lifecycle.LiveData.setValue(LiveData.java:307)
        at androidx.lifecycle.MutableLiveData.setValue(MutableLiveData.java:50)
W/System.err:     at androidx.lifecycle.Transformations$2$1.onChanged(Transformations.java:155)
        at androidx.lifecycle.MediatorLiveData$Source.onChanged(MediatorLiveData.java:152)
        at androidx.lifecycle.LiveData.considerNotify(LiveData.java:131)
W/System.err:     at androidx.lifecycle.LiveData.dispatchingValue(LiveData.java:149)
        at androidx.lifecycle.LiveData.setValue(LiveData.java:307)
W/System.err:     at androidx.lifecycle.MutableLiveData.setValue(MutableLiveData.java:50)
        at androidx.lifecycle.LiveData$1.run(LiveData.java:91)
        at android.os.Handler.handleCallback(Handler.java:794)
W/System.err:     at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:176)
        at android.app.ActivityThread.main(ActivityThread.java:6662)
        at java.lang.reflect.Method.invoke(Native Method)
W/System.err:     at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:547)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:873)
W/FirebaseDataSource: retry() not valid when in state: LOADING_INITIAL

1 Ответ

0 голосов
/ 25 февраля 2020

Вы можете отфильтровать пользователей с разным полом в запросе Firebase.

На основании ваших данных вы можете применить следующий запрос:

FirebaseDatabase.getInstance().getReference().child("User").orderByChild("gender").equalTo("REQUIRED_GENDER_HERE");

Pass эти данные на ваш взгляд, и это должно работать. В вашем случае, поскольку вы используете оболочку Firebase в представлении переработчика, обновления запроса в вашем коде должно быть достаточно.

Для предупреждения об индексе, отсутствующем в вашей базе данных по полу, вам необходимо указать индекс в правилах Firebase. Ознакомьтесь с документацией по правилам здесь: https://firebase.google.com/docs/database/security/indexing-data

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...