[英]I'm trying to get data from firebase but flutter is showing null safety error on StreamBuilder
[英]I'm trying to read information from FireBase, but I get this error. How to fix it?
活动代码。 进入活动后,我收到一个错误:
无法将 java.lang.String 类型的 object 转换为 com.test.nmfestdemo.Info 类型
我尝试以不同的方式编写,但要么什么都没发生,要么 null 出现错误。
public class Account extends AppCompatActivity {
private Button button1;
private TextView textview1;
private Intent i =new Intent();
private String User_KEY ="User";
private DatabaseReference mDataBase;
private FirebaseAuth mAuth;
private DatabaseReference mDataBaseInfo;
private String Info_KEY ="Info";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_account);
button1 = findViewById(R.id.button1);
textview1 = (TextView) findViewById(R.id.textview1);
mDataBase = FirebaseDatabase.getInstance().getReference(User_KEY);
mDataBaseInfo = FirebaseDatabase.getInstance().getReference(Info_KEY);
getDataFromDB();
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
mAuth.signOut();
i.setClass(getApplicationContext(),MainActivity.class);
startActivity(i);
}
});
}
public void getDataFromDB(){
ValueEventListener vListener = new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot postSnapshot) {
for (DataSnapshot ds : postSnapshot.getChildren()) {
Info info = ds.getValue(Info.class);
textview1.setText(String.valueOf(info));
}
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
};
mDataBaseInfo.addValueEventListener(vListener);
}
}
Class 代码
public class Info {
public String day;
public Info(String day) {
this.day = day;
}
public String getDay() {
return day;
}
}
错误代码和FireBase结构
如果Info_KEY
变量包含一个字符串,该字符串的值等于“Info”,那么预期的行为会得到以下错误:
无法将 java.lang.String 类型的 object 转换为 com.test.nmfestdemo.Info 类型
这是因为,在“信息”节点下,没有信息对象。 只有一个名为day
的字段,其中包含字符串值“1”。 因此,您无法将字符串 object 转换为 Info 类型的 object。 如果要读取day
字段的值,则应删除循环:
public void getDataFromDB(){
ValueEventListener vListener = new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot postSnapshot) {
Info info = postSnapshot.getValue(Info.class);
textview1.setText(String.valueOf(info));
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
Log.d("TAG", error.getMessage()); //Never ignore potential errors!
}
};
mDataBaseInfo.addValueEventListener(vListener);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.