Android Firebase,无法获取数据

时间:2018-04-29 15:21:51

标签: android mysql json database firebase

我在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记录示例 Here is the JSON Record Sample

这是我通过App输入的记录 It is the records which I entered through App

我认为转换后的JSON将id和fid视为String,而在mySQL中它们是int。 (我是对的吗?)

告诉我是否需要任何其他代码。

3 个答案:

答案 0 :(得分:1)

问题依赖于此处

Family f = adSnapshot.getValue(Family.class);

您正试图以不合适的类型获取数据。

您应该通过检查Family.class并检查它们的值是否与它们在firebase中的数据库结构中的值相同来更正此问题,如果您将数据库结构放在此处或某些图像,将会很有帮助。

检查您的变量类型中的Family.class是否与firebase中的变量类型相同,同样具有相同的名称。

因此,例如,如果在firebase中有一个名为name的字符串,那么在Family.class中的构造函数中应该具有相同的类型和名称。

String name;

在Firebase中你的json键也应该是名字。

例如,检查一下

enter image description here

例如,您的Family类应该具有与数据库具有相同名称和类型的变量。

enter image description here

同时检查,如果firebase中的值为“”是String类型,并且在POJO中,您应该有一个类型为String的变量,用于您要访问的内容,但如果值dosnt具有“”,则应该是long,int,double或任何类型的数字。

编辑:检查此结构

enter image description here

它将所有值类型都设置为String,但在Family.class中,您具有适合此类结构的值。

enter image description here

你应该在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

com.google.firebase.database.DatabaseException: Failed to convert a value of type java.lang.String to double

Firebase android error "Failed to convert value of type "