import android.util.Log;
import androidx.annotation.NonNull;
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 LockerDatabase implements ValueEventListener{
private FirebaseDatabase database;
private DatabaseReference reference;
private User currUser;
private ArrayList<Password> passwords;
public int count;
public LockerDatabase(String email, String name) {
database = FirebaseDatabase.getInstance();
reference = database.getReference();
currUser = new User();
passwords = new ArrayList<>();
if (!exists(email))
createUser(email, name);
else
loadPasswords();
}
private void loadPasswords() {
//TODO: read from db all passwords
}
public String getEmail(){
return currUser.getEmail();
}
private void createUser(String email, String name) {
currUser.setEmail(email);
currUser.setName(name);
currUser.setHashId(Integer.toString(email.hashCode()));
//TODO: add user to database
}
private boolean exists(String email) {
Query existence = reference.child("users").child(Integer.toString(email.hashCode()));
existence.addValueEventListener(this);
if (currUser == null)
return false;
else
return true;
}
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
currUser.setEmail((String)dataSnapshot.child("email").getValue());
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
Log.w("CAN", "user_cancelled", databaseError.toException());
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.locker_layout);
Intent intent = getIntent();
userEmail = intent.getStringExtra("email");
userName = intent.getStringExtra("name");
db = new LockerDatabase(userEmail, userName);
TextView t = findViewById(R.id.textView);
t.setText(db.getEmail());
//TODO: display db results
//TODO: if the user is new, set an access key
}
不要使用Integer.ToString(email.hashcode())
作为子级,或者使用push()
方法生成随机密钥,或者使用userUID
(如果使用firebase身份验证)。
如果使用push()
,则首先存储密钥:
String key = reference.child("users").push().getKey();
然后,当您要检索数据时,请执行以下操作:
Query existence = reference.child("users").child(key);
existence.addValueEventListener(this);
我有一个应用程序,存储256行数字,指示网格视图中每个256个单元格的背景颜色。目前所有的值都是-16449536,表示简单的黑色。 以下是我在Firebase数据库中的JSON结构 在onCreative方法中,我使用for循环为每个单元格读取256次: 并非所有网格都是黑色的。每次我重新打开应用程序以触发onCreate方法时,网格模式都会有所不同。我是否达到了firebase实时数据库的某些
我是消防队的新手。我在用firebase数据库。其中我有两个节点,一个有用户信息,第二个有来自用户的所有评论。这些是数据库结构 用户节点 我要做的是获取一篇文章的所有评论,然后从评论节点获取,这实际上是对文章发表评论的用户键,然后从Firebase获取特定的用户信息。我写了以下代码。 null 评论1用户a 评论2用户b
把日志放在各处,我发现它到达了语句。但是,回调从未被调用。 它卡在那一点上。没有错误。没有例外。 最大的问题是,从那时起,它停止了整个应用程序的所有回调。我的所有活动都被阻止了,因为它从不调用。看起来它在内部崩溃或被线程阻塞。
我目前有一个类似以下的数据库结构。如果无法在Firebase实时数据库安全规则中循环,我如何基于用户对多个组的访问来保护数据?要遵循的例子... 数据库结构: 我如何在上指定安全规则,以基于中指定的任何组与当前用户的
一切正常,但DatabaseReference无法获取数据,这就像是忽略了我的代码运行,就像我的internet无法运行一样,请帮助我,我是这个社区的新手,下面是我的代码和图片。 以前它是工作的,但由于我只是更改了一些代码,使只有currentVersion>=vCode,这样即使数据库中的值是 firebase数据库映像 mainactivity.java manifest.xml 依赖关系
我有以下Firebase实时数据库连接到我的Flatter项目: 我对flutter和fire base相当陌生,我知道在我的flutter项目中访问此数据库中数据的一种方法是使用数据库引用变量。所以我有以下参考变量: 现在,如何使用此itemRef访问数据库中的温度和脉冲值?