gpt4 book ai didi

java - Firebase onDataChange - 值事件监听器不监听更改

转载 作者:行者123 更新时间:2023-12-02 01:43:10 27 4
gpt4 key购买 nike

我正在尝试从用户帐户读取数据列表,如下所示: db

但是 onDataChange 监听器没有被调用。

我想获取“checked”和“desc”的值;但是,当我添加如下所示的 ListenForSingleValueEvent 监听器时,不会调用 onDataChange 并且我不会检索值。

DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference("accounts")
.child(uid).child("user_t").child(item_id);
//"user_t" has been shortened for this post

databaseReference.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
Log.i(TAG, "onDataChange: Getting single data");

String name = (String) dataSnapshot.child("checked").getValue();
String date = (String) dataSnapshot.child("desc").getValue();
}
//on Cancel etc..
};

即使只有:

String name = (String) dataSnapshot.child("checked").getValue();"

onDataChange内部它仍然不会触发。根据我从 Firebase 文档中读到的内容,我必须使用监听器来读取数据。

我在应用程序的另一个部分有类似的代码,它或多或少与上面的代码应该做的事情相同,并且工作完美。

我最近在使用 Firebase 时遇到了很多问题,因此非常感谢您的帮助。干杯!

编辑:更多具有相同结果的代码:

DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference("accounts").child(uid);
databaseReference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
Log.i(TAG, "onDataChange: ");
String name = dataSnapshot.child("name").getValue().toString();
}

@Override
public void onCancelled(DatabaseError databaseError) {

}
});

编辑2:我可以在帐户部分和项目部分创建一个 key 并为其设置一个值,但它将调用 onDataChange 函数。我已经能够绕过这个问题;但是,一旦其调用类被解构,就会调用监听器,并且由于类级别变量不再存在而引发 NullPointerException。

编辑 3 - 全类:

这是一个不同的类(class),但我遇到了完全相同的问题。

public class StartActivity extends AppCompatActivity {

//firebase variables
private FirebaseAuth mAuth;
private FirebaseUser currentUser;
private FirebaseDatabase database;
private DatabaseReference userReference;
private String uid;
private String accountType;

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
//set splash theme
setTheme(R.style.SplashStyle);
super.onCreate(savedInstanceState);

//get an authentication instance
mAuth = FirebaseAuth.getInstance();
//get user database
database = FirebaseDatabase.getInstance();
userReference = database.getReference(ACCOUNTS);


//get the user and check if logged in
currentUser = mAuth.getCurrentUser();
if (currentUser != null){
uid = currentUser.getUid();
getAccountType();

//open the dashboard
openDashboard();
}else{
openLogin();
}

finish();
}

private void openDashboard() {
Intent dashboard = new Intent(this,Dashboard.class);

dashboard.putExtra(String_Values.ACCOUNT_TYPE,accountType);
dashboard.putExtra(String_Values.ACCOUNT_UID,uid);

startActivity(dashboard);
finish();

}

private void openLogin(){
Intent loginIntent = new Intent(this,Login.class);
startActivity(loginIntent);
}


private void getAccountType(){
FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference databaseReference = database.getReference(ACCOUNTS).child(uid);
Log.i(String_Values.TAG, "uid: " + uid);
databaseReference.addListenerForSingleValueEvent(get_account_listener);
}

ValueEventListener get_account_listener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
accountType = dataSnapshot.child(TYPE).getValue().toString();
}

@Override
public void onCancelled(DatabaseError databaseError) {
Log.i(String_Values.TAG, "onCancelled: " + databaseError.getMessage());
}
};

}

最佳答案

您无法获取任何内容,因为您没有循环获取 DataSnapshot 对象中的子级。因此,要解决此问题,请使用以下代码行:

DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference("accounts")
.child(uid).child("user_t");
databaseReference.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot ds : dataSnapshot.getChildren()) {
String name = ds.child("checked").getValue(String.class);
String date = ds.child("desc").getValue(String.class);
}

}

@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
Log.d(TAG, databaseError.getMessage()); //Don't ignore errors!
}
};

如果仍然没有触发,请检查 logcat 以查看 databaseError.getMessage() 返回。

关于java - Firebase onDataChange - 值事件监听器不监听更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54140701/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com