Android Firebase, Невозможно получить данные - PullRequest
0 голосов
/ 29 апреля 2018

Я создал приложение на основе семейного дерева в базе данных 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

Это записи, которые я ввел через приложение It is the records which I entered through App

Я думаю, что преобразованный JSON рассматривал id и fid как String, тогда как в mySQL они являются int. (я прав?)

Скажите, нужен ли какой-либо другой код.

Ответы [ 3 ]

0 голосов
/ 29 апреля 2018

Это происходит потому, что в вашей модели есть переменная типа целочисленного типа, но вы возвращаете String из Firebase ... либо конвертируете переменную в строку, либо возвращаете целое число из Firebase .... Обе модели и переменная Firebase должны иметь один и тот же тип данных.

0 голосов
/ 29 апреля 2018

Согласно вашей ошибке ниже: -

com.google.firebase.database.DatabaseException: не удалось преобразовать значение типа java.lang.String в int на com.google.android.gms.internal.firebase_database.zzkt.zzb (неизвестный источник: 180)

Я думаю, вам нужно проверить, где вы пытались сохранить значение в int, которое хранится в firebase в строке.

Итак, сначала проверьте его и, если необходимо, приведите, затем приведите свое значение, используя Integer.parseInt или Integer.valueof

например,

Integer.valueOf(dataSnapShot.getValue()); 

или

Integer.parseInt(dataSnapShot.getValue()); 

Для лучшего понимания этого вы также можете обратиться к ссылкам переполнения стека:

Исключение базы данных Firebase: не удалось преобразовать значение типа java.lang.Long в строку

com.google.firebase.database.DatabaseException: не удалось преобразовать значение типа java.lang.String в двойное значение

Firebase android error "Не удалось преобразовать значение типа"

0 голосов
/ 29 апреля 2018

Проблема заключается здесь

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

вы пытаетесь получить данные неподходящего типа.

Вы должны исправить это, проверив Family.class и проверив, совпадают ли значения в структуре вашей базы данных в firebase, будет полезно, если вы разместите здесь структуру вашей базы данных или некоторые изображения.

Проверьте, например, есть ли у вас в Family.class типы переменных такие же, как в firebase, с тем же именем.

Так, например, если в firebase есть строка с именем name, которую вы должны иметь в конструкторе внутри Family.class того же типа и имени.

String name;

и в Firebase ваш json-ключ тоже должен быть name.

Например, отметьте это

enter image description here

ваш класс Family, например, должен иметь переменные с тем же именем и типом, что и ваша база данных.

enter image description here

Также проверьте, имеет ли значение в firebase "" тип String, и в вашем POJO у вас должна быть переменная с типом String для того, к чему вы пытаетесь получить доступ, но если значение не имеет "", это должно быть 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 создает уникальные идентификаторы для каждого элемента в вашей структуре базы данных, и типы, импортируемые из вашей базы данных MySQL, не совпадают с типами firebase, я предлагаю вам либо изменить ваши типы переменных Family.class, чем я упомянутый выше, или скопируйте вашу базу данных MySQL с помощью firebase и тех же типов переменных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...