![](/img/trans.png)
[英]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.