我在java和mysql数据库上创建了一个家族树应用程序。现在我正在测试一个Android应用程序。所以我将我的mysql数据库文件转换为JSON格式并将其上传到firebase。当我在其上插入记录时,它工作得很好但是当我尝试获取数据时它显示错误:
com.google.firebase.database.DatabaseException:无法将java.lang.String类型的值转换为int 在com.google.android.gms.internal.firebase_database.zzkt.zzb(未知来源:180)
应该是什么问题?我尝试从数据库中删除数据,我通过JSON文件上传,然后直接从应用程序插入记录到数据库并获取它们,它工作正常,但是当我从JSON文件添加记录时,它正在创建问题。
这是应用程序中用于获取数据的代码:
public void clicked(){
mDatabase.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
List<Family> FamilyList = new ArrayList<>();
for (DataSnapshot adSnapshot: dataSnapshot.getChildren()) {
Family f = adSnapshot.getValue(Family.class);
FamilyList.add(f);
// adsList.add(adSnapshot.getValue(Family.class));
}
Toast.makeText(MainActivity.this, "Total Records: "+FamilyList.size(), Toast.LENGTH_SHORT).show();
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
家庭模特班:
public class Family {
int id;
String name;
String fatherName;
int fid;
String city;
String state;
public Family(int id, String name, String fatherName, int fid, String city, String state) {
this.id = id;
this.name = name;
this.fatherName = fatherName;
this.fid = fid;
this.city = city;
this.state = state;
}
public Family()
{
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getFatherName() {
return fatherName;
}
public void setFatherName(String fatherName) {
this.fatherName = fatherName;
}
public int getFid() {
return fid;
}
public void setFid(int fid) {
this.fid = fid;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
}
我认为转换后的JSON将id和fid视为String,而在mySQL中它们是int。 (我是对的吗?)
告诉我是否需要任何其他代码。
答案 0 :(得分:1)
问题依赖于此处
Family f = adSnapshot.getValue(Family.class);
您正试图以不合适的类型获取数据。
您应该通过检查Family.class并检查它们的值是否与它们在firebase中的数据库结构中的值相同来更正此问题,如果您将数据库结构放在此处或某些图像,将会很有帮助。
检查您的变量类型中的Family.class是否与firebase中的变量类型相同,同样具有相同的名称。
因此,例如,如果在firebase中有一个名为name的字符串,那么在Family.class中的构造函数中应该具有相同的类型和名称。
String name;
在Firebase中你的json键也应该是名字。
例如,检查一下
例如,您的Family类应该具有与数据库具有相同名称和类型的变量。同时检查,如果firebase中的值为“”是String类型,并且在POJO中,您应该有一个类型为String的变量,用于您要访问的内容,但如果值dosnt具有“”,则应该是long,int,double或任何类型的数字。
编辑:检查此结构
它将所有值类型都设置为String,但在Family.class中,您具有适合此类结构的值。
你应该在firebase上更改你的数据库,这样你的所有类型都会与你的Family.class中的类型匹配,无论哪种方式都不能获取你的值
注意:如果您想要获取所有值,就像它们在第一张图像上一样,只需在此处更改Family.class:
int id;
String name;
String fatherName;
int fid;
String city;
String state;
到此:
String id;
String name;
String fatherName;
String fid;
String city;
String state;
同时更改构造函数类型和所有内容以匹配所有字符串
问题是firebase为数据库结构中的每个元素创建了唯一的ID,从MySQL数据库导入的类型与firebase数据库不同,我建议你改变你的Family.class变量类型。如上所述,或使用firebase和相同的变量类型复制MySQL数据库。
答案 1 :(得分:0)
这种情况正在发生,因为您的模型中有一个整数数据类型的变量,但是您从Firebase返回String ...要么将您的变量转换为字符串,要么从firebase返回整数.... model和Firebase变量都应该是相同的数据类型。
答案 2 :(得分:0)
根据您的以下错误: -
com.google.firebase.database.DatabaseException:无法在com.google.android.gms.internal.firebase_database.zzkt.zzb中将java.lang.String类型的值转换为int(未知来源:180)< / p>
我认为,你需要检查一下你试图在int中存储值的地方,这是存储在firebase中的字符串。
首先检查它,如果有必要,然后使用Integer.parseInt 或 Integer.valueof
强制转换投射您的值例如,
Integer.valueOf(dataSnapShot.getValue());
或
Integer.parseInt(dataSnapShot.getValue());
为了更好地理解这一点,您还可以参考以下链接中的堆栈溢出:
Firebase DatabaseException: Failed to convert value of type java.lang.Long to String