当前位置: 首页 > 知识库问答 >
问题:

Firebase实时数据库配置

臧友樵
2023-03-14

我正在尝试在用户登录/登录其个人资料后在firebase中创建一个实时数据库。我做了身份验证火基,它向我表明用户在火库身份验证中。我尝试了很多教程,但没有任何效果。如何连接身份验证和实时数据库以生成用户配置文件。

规则:

  "rules": {
    ".read": "auth != null",
    "$user_id":{
       ".read": "auth.uid === $user_id",
       ".write": "auth.uid === $user_id"
    }
  }
}

用户类:

   public String firstName;
    public String secondName;
    public String uid;
    public String email;
    public User(){

    }



    public User (String firstName, String secondName, String uid, String email) {
        this.firstName = firstName;
        this.secondName = secondName;
        this.uid=uid;
        this.email=email;
    }

    public User (String firstname, String secondname) {
    }

    public String getFirstName () {
        return firstName;
    }

    public String getSecondName () {
        return secondName;
    }

    public String getUid () {
        return uid;
    }

    public String getEmail () {
        return email;
    }

    public void setFirstName (String firstName) {
        this.firstName = firstName;
    }

    public void setSecondName (String secondName) {
        this.secondName = secondName;
    }

    public void setUid (String uid) {
        this.uid = uid;
    }

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

和UserDetails类:

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

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

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.ValueEventListener;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

public class UserDetails extends AppCompatActivity {
    private FirebaseAuth auth;
  private DatabaseReference reference;
  private FirebaseDatabase database;
  private FirebaseAuth.AuthStateListener authStateListener;
    private FirebaseUser user;
    private EditText firstName,secondName;
    private Button saveInfo;



    @Override
    protected void onCreate (Bundle savedInstanceState) {
        super.onCreate ( savedInstanceState );
        setContentView ( R.layout.activity_user_details );
        firstName=(EditText)findViewById ( R.id.firstname );
        secondName=(EditText)findViewById ( R.id.secondname );
        saveInfo=(Button)findViewById ( R.id.data );
        auth=FirebaseAuth.getInstance ();
        reference.addValueEventListener ( new ValueEventListener () {
            @Override
            public void onDataChange (@NonNull DataSnapshot dataSnapshot) {
                String firstname=dataSnapshot.getValue (User.class)
            }

            @Override
            public void onCancelled (@NonNull DatabaseError databaseError) {

            }
        } )





    }

}


我在DataSnapshot中删除了一些代码,因为它没有work.What我能做什么?我使用了很多教程,但数据库中没有编写任何内容。我想在数据库中写入userId、名字和第二个名字

共有1个答案

夹谷浩博
2023-03-14

当您询问写入时,代码< code > reference . addvalueeventlistener 从数据库中读取。

要写入数据库,可以执行以下操作:

User user = FirebaseAuth.getInstance().getCurrentUser();
if (user != null) {
  DatabaseReference userRef = FirebaseDatabase.getInstance().getReference(user.getUid());
  userRef.child("firstname").setValue("Value of firstname field");
  userRef.child("secondname").setValue("Value of secondname field");
}

这将创建一个用户数据存储在其UID下的结构,这是您的安全规则所强制执行的。

您可以将单个 setValue() 调用中的两个写入操作合并为:

Map<String,Object> values = new HashMap<>();
values.put("firstname", "Value of firstname field");
values.put("secondname", "Value of secondname field");
userRef.setValue(values);

如果不想使用值映射,可以创建一个Java类来表示用户的属性。具有这两个JSON属性的类的最简单版本是:

class UserProperties {
  public string firstname;
  public string secondname;
}

然后初始化并编写它:

UserProperties userprops = new UserProperties();
userprops.firstname = "Value of firstname field";
userprops.secondname = "Value of secondname field";
userRef.setValue(userprops);
 类似资料:
  • 我在一个Android应用程序中使用Firebase数据库,每次用户启动时,我都会在数据库中存储一些值,为此我会执行以下操作: 正如您在子方法中看到的,如果称为“usrId”,它将创建usrId目录,并在其中添加所有neccesary信息。但是我想为每个用户创建目录,所以我尝试传递usrId变量作为参数。但它不起作用。当我调试代码时,调试器说本地var usrId无法识别,我的问题是如何在Fire

  • 我正在尝试将Firebase与我的react应用程序一起使用。 我有一个配置文件如下: 当我尝试此操作时,会出现一个错误,显示: FIREBASE致命错误:无法确定FIREBASE数据库URL。在调用firebase时,请确保包含databaseURL选项。初始化app()。 我不能理解这个错误,因为我在初始化应用程序的调用中包含了配置。配置包括数据库URL。 如何初始化数据库?

  • 所以我正在制作约会应用程序,现在我需要为用户创建一个匹配的人员列表。 因此,我需要一个firebase查询来查看性别,并检查是否已经匹配,如果匹配,则不应将其包括在列表中。 我试着按性别过滤数据。如何编辑此查询以检查它们是否已匹配?匹配项显示在用户/{userID}/Matches/{matchedUserID}中 这是我尝试的:

  • 我需要将数据从Firebase实时数据库切换到Firestore DB。我该怎么做? 视频主要关注实时db,但我认为由于我没有激活实时db,它会转到Firestore。但我让它工作的唯一方法是启用实时db。所以我可以在Firebase中插入和读取数据,但我需要它在Firestore中。 任何帮助都是非常感激的。

  • 查看其他关于堆栈溢出的问题,有人说这可能是因为valueEventListener的位置不正确,但...不是吗?我正在钻进食物条目/营养条目,但我不知道如何钻进更深。没办法匿名给孩子打电话?我尝试调用childEventListener而不是valueEventListener,其他的都一样,但我再也没有得到那个消息,但我仍然无法检索到我想要的数据。 编辑: 谢谢你到目前为止的帮助。根据下面Has