Firebase / Android - Проверить, совпадают ли данные из базы данных с другими данными в той же базе данных - PullRequest
0 голосов
/ 23 марта 2020

У меня есть приложение, которое предлагает случайную работу людям. Есть раздел, где можно увидеть доступные ему рабочие места рядом с ним. Когда пользователь нажимает эту опцию, должны появиться вакансии, доступные в его местоположении. У меня есть база данных firebase с двумя узлами, Job и Users , в которые добавляются местоположение пользователя и местоположение задания. Как отобразить вакансии, доступные в его месте? Например, пользователь живет в Дубае и хочет видеть вакансии, доступные в Дубае. Я хочу иметь возможность извлечь местоположение текущего пользователя и проверить, совпадает ли оно с местоположением задания. Это то, что я пытался, но это не работает.

Home_NearYou. java:

package com.example.oddsynew;

import android.os.Bundle;
import android.widget.Toast;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
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 Home_NearYou extends AppCompatActivity {

    DatabaseReference myRef;
    FirebaseAuth mAuth;
    RecyclerView nearYouList;
    ArrayList<Job> list;
    HomeAdapter adapter;
    Query query;
    Users user;
    FirebaseUser u;
    String userID;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_home__near_you);

        try {
            mAuth = FirebaseAuth.getInstance();
            u = mAuth.getCurrentUser();
            userID = u.getUid();
            myRef = FirebaseDatabase.getInstance().getReference("Users").child(userID).child("state");

            nearYouList = (RecyclerView) findViewById(R.id.nearYou);
            nearYouList.setLayoutManager(new LinearLayoutManager(this));
            list = new ArrayList<Job>();

            adapter = new HomeAdapter(Home_NearYou.this, list);
            nearYouList.setAdapter(adapter);

            query = FirebaseDatabase.getInstance().getReference("Jobs")
                    .orderByChild("location")
                    .equalTo(myRef.toString());

            query.addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                    for (DataSnapshot ds : dataSnapshot.getChildren()) {
                        Job j = ds.getValue(Job.class);
                        list.add(j);
                    }
                    adapter.notifyDataSetChanged();
                }

                @Override
                public void onCancelled(@NonNull DatabaseError databaseError) {
                    Toast.makeText(Home_NearYou.this, "Error", Toast.LENGTH_SHORT).show();
                }
            });
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}

Job. java:

package com.example.oddsynew;

public class Job {
    String job_name, recruiter_name, location, job_charge, add_pref, start_date, end_date, start_time, end_time, tasks, job_desc, prof_pic, job_tasks;

    public Job() {
    }

    public Job(String job_name, String recruiter_name, String location, String job_charge, String add_pref, String start_date,
               String end_date, String start_time, String end_time, String tasks, String job_desc, String prof_pic, String job_tasks) {
        this.job_name = job_name;
        this.recruiter_name = recruiter_name;
        this.location = location;
        this.job_charge = job_charge;
        this.add_pref = add_pref;
        this.start_date = start_date;
        this.end_date = end_date;
        this.start_time = start_time;
        this.end_time = end_time;
        this.tasks = tasks;
        this.job_desc = job_desc;
        this.prof_pic = prof_pic;
        this.job_tasks = job_tasks;
    }

    public Job(String prof_pic) {
        this.prof_pic = prof_pic;
    }

    public String getJob_name() {
        return job_name;
    }

    public void setJob_name(String job_name) {
        this.job_name = job_name;
    }

    public String getRecruiter_name() {
        return recruiter_name;
    }

    public void setRecruiter_name(String recruiter_name) {
        this.recruiter_name = recruiter_name;
    }

    public String getLocation() {
        return location;
    }

    public void setLocation(String location) {
        this.location = location;
    }

    public String getJob_charge() {
        return job_charge;
    }

    public void setJob_charge(String job_charge) {
        this.job_charge = job_charge;
    }

    public String getProf_pic() {
        return prof_pic;
    }

    public void setProf_pic(String prof_pic) {
        this.prof_pic = prof_pic;
    }

    public String getAdd_pref() {
        return add_pref;
    }

    public void setAdd_pref(String add_pref) {
        this.add_pref = add_pref;
    }

    public String getStart_time() {
        return start_time;
    }

    public void setStart_time(String start_time) {
        this.start_time = start_time;
    }

    public String getEnd_time() {
        return end_time;
    }

    public String getStart_date() {
        return start_date;
    }

    public void setStart_date(String start_date) {
        this.start_date = start_date;
    }

    public String getEnd_date() {
        return end_date;
    }

    public void setEnd_date(String end_date) {
        this.end_date = end_date;
    }

    public void setEnd_time(String end_time) {
        this.end_time = end_time;
    }

    public String getTasks() {
        return tasks;
    }

    public void setTasks(String tasks) {
        this.tasks = tasks;
    }

    public String getJob_desc() {
        return job_desc;
    }

    public void setJob_desc(String job_desc) {
        this.job_desc = job_desc;
    }

    public String getJob_tasks() {
        return job_tasks;
    }

    public void setJob_tasks(String job_tasks) {
        this.job_tasks = job_tasks;
    }
}

Пользователи. java:

package com.example.oddsynew;

public class Users {
    private String fname;
    private String lname;
    private String email;
    private String pass;
    private String state;
    private String city;
    private String age;

    public Users() {
    }

    public String getFname() {
        return fname;
    }

    public String getLname() {
        return lname;
    }

    public String getEmail() {
        return email;
    }

    public String getPass() {
        return pass;
    }

    public void setFname(String fname) {
        this.fname = fname;
    }

    public void setLname(String lname) {
        this.lname = lname;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public void setPass(String pass) {
        this.pass = pass;
    }

    public String getState() {
        return state;
    }

    public void setState(String state) {
        this.state = state;
    }

    public String getCity() {
        return city;
    }

    public void setCity(String city) {
        this.city = city;
    }

    public String getAge() {
        return age;
    }

    public void setAge(String age) {
        this.age = age;
    }
}

База данных заданий:

enter image description here

База данных пользователей:

enter image description here

ОБНОВЛЕНИЕ: Это пример того, как я вставляю данные в Firebase.

SignUp2. java:

package com.example.oddsynew;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;

import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.auth.AuthResult;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;

public class SignUp2 extends AppCompatActivity {
    EditText state, city, age;
    Button submitBtn;
    FirebaseAuth mAuth;
    DatabaseReference myRef;
    Users user;
    String firstName, lastName, _email, _pass, state_, city_, age_;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_sign_up2);

        state = (EditText) findViewById(R.id.state);
        city = (EditText) findViewById(R.id.city);
        age = (EditText) findViewById(R.id.age);
        submitBtn = (Button) findViewById(R.id.submitBtn);
        user = new Users();

        myRef = FirebaseDatabase.getInstance().getReference().child("Users");
        mAuth = FirebaseAuth.getInstance();

        /*if(mAuth.getCurrentUser() != null){
            startActivity(new Intent(getApplicationContext(), Home.class));
            Toast.makeText(SignUp2.this, "Welcome Back",Toast.LENGTH_LONG).show();
            finish();
        }*/

        submitBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                firstName = getIntent().getStringExtra("fName");
                lastName = getIntent().getStringExtra("lName");
                _email = getIntent().getStringExtra("email");
                _pass = getIntent().getStringExtra("pass");

                state_ = state.getText().toString().trim();
                city_ = city.getText().toString().trim();
                age_ = age.getText().toString();

                user.setFname(firstName);
                user.setLname(lastName);
                user.setEmail(_email);
                user.setPass(_pass);
                user.setState(state_);
                user.setCity(city_);
                user.setAge(age_);

                if(state_.matches("") || city_.matches("") || age_.matches("")){
                    Toast.makeText(SignUp2.this, "Please fill all fields",Toast.LENGTH_LONG).show();
                }
                else{
                    myRef.push().setValue(user);
                    Toast.makeText(SignUp2.this, "Data Inserted",Toast.LENGTH_LONG).show();
                }

                mAuth.createUserWithEmailAndPassword(_email, _pass).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
                    @Override
                    public void onComplete(@NonNull Task<AuthResult> task) {
                        if(task.isSuccessful()){
                            Toast.makeText(SignUp2.this, "User Created",Toast.LENGTH_LONG).show();
                            startActivity(new Intent(getApplicationContext(), Home.class));
                        }else{
                            Toast.makeText(SignUp2.this, "Error",Toast.LENGTH_LONG).show();

                        }
                    }
                });
            }
        });

    }
}

1 Ответ

1 голос
/ 23 марта 2020

В вашем Users узле вы не используете userID, эти идентификаторы на рисунке - это идентификаторы, сгенерированные методом push(). Поэтому сначала измените структуру, чтобы использовать userID вместо push(), затем вы можете сделать это:

mAuth = FirebaseAuth.getInstance();
u = mAuth.getCurrentUser();
userID = u.getUid();
myRef = FirebaseDatabase.getInstance().getReference("Users").child(userID);

            myRef.addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                   String state = dataSnapshot.child("state").getValue(String.class);
                   query = FirebaseDatabase.getInstance().getReference("Jobs")
                    .orderByChild("location")
                    .equalTo(state);

                   query.addValueEventListener(new ValueEventListener() {
                    @Override
                   public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                     if(dataSnapshot.exists()){
                         //do whatever you want
                      }
                    }
                    @Override
                  public void onCancelled(@NonNull DatabaseError databaseError) {
                    Toast.makeText(Home_NearYou.this, "Error", Toast.LENGTH_SHORT).show();
                     }
                  });

                }
                @Override
                public void onCancelled(@NonNull DatabaseError databaseError) {
                    Toast.makeText(Home_NearYou.this, "Error", Toast.LENGTH_SHORT).show();
                }
            });

Поэтому сначала получите state из пользовательского узла. Единственный способ получить данные - использовать addValueEventListener. После получения state, выполните другой запрос для узла jobs, который проверяет, равен ли location полученному state, присоедините valueEventListener и используйте метод exists(), чтобы проверить, если вы получаете любые данные из этого запроса.

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