Firebase/Android - 检查数据库中的数据是否与同一数据库中的另一个数据匹配

德维卡。

我有一个应用程序可以为人们提供零工。有一个部分可以在其中查看他附近的可用工作。当用户单击此选项时,应显示他所在位置的可用工作。我有一个带有两个节点的 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();
        }
    }
}

作业.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;
    }
}

作业数据库:

在此处输入图片说明

用户数据库:

在此处输入图片说明

更新:这是我如何将数据插入 Firebase 的示例。

注册2.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();

                        }
                    }
                });
            }
        });

    }
}
彼得·哈达德

在您的Users节点中,您没有使用userID,图片中的那些 id 是由该push()方法生成的 id 因此,首先将结构更改为 useuserID而不是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检索节点执行不同的查询,附加 avalueEventListener并使用该方法exists()检查是否从该查询中获得了任何数据。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

通过同一数据库中另一个表的 id 过滤一个 SQLite 数据库表中的数据

如何获取数据并插入同一数据库的另一个表中?

如何使用同一数据库中另一个集合的数据创建 mongoDB 集合

从一个数据库表中选择一些数据,然后插入同一数据库的另一个表中

键入存储在 C# 中同一数据库中的另一个值后,如何从数据库中读取值?

将集合从同一MongoDB实例中的一个数据库移动到另一个数据库

如何使用SQL在一个数据库中搜索与另一个数据库中的值匹配的值

如何基于一个表与另一个数据库中的同一表更新数据库中的表记录?

如何根据同一数据库中另一个表的条件更新sql数据库表

如何在Postgres中将某些表从一个模式复制到同一数据库中的另一个数据库,并保持原始模式?

如何从数据库中的数据复制到另一个数据库?

如何将数据从一个表复制到同一数据库中的另一个表?

如何将大量数据从一个表复制到同一数据库中的另一个表?

将数据从一个表移动到同一数据库中的另一个表

使用 pgadmin 将数据行从一个表复制到同一数据库中的另一个表

Laravel:从另一个数据库表中获取数据

从Joomla 3.2+中的另一个数据库访问数据

从tmp数据库中的表插入并更新到另一个数据库中的表

我可以在postgresql中使用另一个数据库的表,但给人印象是该表存在于同一数据库中吗?

将数据从一个数据库表插入到SQL Server中的另一数据库表

根据存储在另一个数据库中的值为数据库分配新值

将部分数据库表合并到另一个数据库表中?

从当前数据库中的另一个数据库运行存储过程

如何基于另一个数据库中满足的参数创建SQL数据库

SQLite 从另一个数据库中的一行替换一个数据库中的一行

查看保存在一个数据库中但从另一个数据库收集数据的视图

需要从一个数据库中提取大量数据并插入到另一个数据库中

将一个数据库表中的行插入另一个数据库中的两个不同表中

如何将一个数据字段的值复制到同一 SQLite 数据库中的另一个表中