¿Cuál es el error que hace que la aplicación de la parada cuando se recuperan datos de Firebase?

Pranav Kumar:

Esta es una aplicación que utiliza la base de datos Firebase.

He añadido todos los datos en la base de fuego y ahora tengo que recuperarlo y visualización utilizando vista de lista.

Probé a buscar y mostrar los datos en mi aplicación de base de fuego pero la aplicación se detiene cada vez.

Echar un vistazo a la pantalla

introducir descripción de la imagen aquí

Este es el país de clase del modelo

Country.java

public class Country {

private String name;
private String total;
private String newCases;
private String totalDeaths;
private String newDeaths;
private String totalRecovered;
private String activeCases;
private String seriousCases;

public Country() {
}

public Country(String name, String total, String newCases, String totalDeaths, String newDeaths, String totalRecovered, String activeCases, String seriousCases) {
    this.name = name;
    this.total = total;
    this.newCases = newCases;
    this.totalDeaths = totalDeaths;
    this.newDeaths = newDeaths;
    this.totalRecovered = totalRecovered;
    this.activeCases = activeCases;
    this.seriousCases = seriousCases;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public String getTotal() {
    return total;
}

public void setTotal(String total) {
    this.total = total;
}

public String getNewCases() {
    return newCases;
}

public void setNewCases(String newCases) {
    this.newCases = newCases;
}

public String getTotalDeaths() {
    return totalDeaths;
}

public void setTotalDeaths(String totalDeaths) {
    this.totalDeaths = totalDeaths;
}

public String getNewDeaths() {
    return newDeaths;
}

public void setNewDeaths(String newDeaths) {
    this.newDeaths = newDeaths;
}

public String getTotalRecovered() {
    return totalRecovered;
}

public void setTotalRecovered(String totalRecovered) {
    this.totalRecovered = totalRecovered;
}

public String getActiveCases() {
    return activeCases;
}

public void setActiveCases(String activeCases) {
    this.activeCases = activeCases;
}

public String getSeriousCases() {
    return seriousCases;
}

public void setSeriousCases(String seriousCases) {
    this.seriousCases = seriousCases;
}
}

Esta es la actividad de clase

COUNTRY_LIST.Java

public class Country_List extends AppCompatActivity {

ListView listView;
FirebaseDatabase firebaseDatabase;
DatabaseReference reff;
ArrayList<String> countries;
ArrayAdapter<String> adapter;
Country country;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_country__list);
    listView = (ListView) findViewById(R.id.listView);
    country = new Country();
    firebaseDatabase = FirebaseDatabase.getInstance();
    reff = firebaseDatabase.getReference().child("country");
    countries = new ArrayList<>();
    adapter = new ArrayAdapter<>(Country_List.this, R.layout.country_info, R.id.country_info_list, countries);

    reff.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            for (DataSnapshot ds: dataSnapshot.getChildren()){
                country = ds.getValue(Country.class);
                countries.add("Country Name:" + country.getName().toString() + "\n" + "Total Cases:" + country.getTotal().toString() + "\n" + "New Cases:" + country.getNewCases().toString() + "\n" + "Total Deaths:" + country.getTotalDeaths().toString() + "\n" + "New Deaths:" + country.getNewCases().toString() + "Total Recovered:" + country.getTotalRecovered().toString() + "Active Cases:" + country.getActiveCases().toString() + "\n" + "Serious Cases:" + country.getSeriousCases().toString());
            }
            listView.setAdapter(adapter);
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {

        }
    });
}

StackTrace

com.google.firebase.database.DatabaseException: Failed to convert value of type java.lang.Long to String
    at com.google.firebase.database.core.utilities.encoding.CustomClassMapper.convertString(com.google.firebase:firebase-database@@19.2.1:425)
    at com.google.firebase.database.core.utilities.encoding.CustomClassMapper.deserializeToClass(com.google.firebase:firebase-database@@19.2.1:216)
    at com.google.firebase.database.core.utilities.encoding.CustomClassMapper.deserializeToType(com.google.firebase:firebase-database@@19.2.1:178)
    at com.google.firebase.database.core.utilities.encoding.CustomClassMapper.access$100(com.google.firebase:firebase-database@@19.2.1:47)
    at com.google.firebase.database.core.utilities.encoding.CustomClassMapper$BeanMapper.deserialize(com.google.firebase:firebase-database@@19.2.1:592)
    at com.google.firebase.database.core.utilities.encoding.CustomClassMapper$BeanMapper.deserialize(com.google.firebase:firebase-database@@19.2.1:562)
    at com.google.firebase.database.core.utilities.encoding.CustomClassMapper.convertBean(com.google.firebase:firebase-database@@19.2.1:432)
    at com.google.firebase.database.core.utilities.encoding.CustomClassMapper.deserializeToClass(com.google.firebase:firebase-database@@19.2.1:231)
    at com.google.firebase.database.core.utilities.encoding.CustomClassMapper.convertToCustomClass(com.google.firebase:firebase-database@@19.2.1:79)
    at com.google.firebase.database.DataSnapshot.getValue(com.google.firebase:firebase-database@@19.2.1:203)
    at com.example.covid_19explorer.Country_List$1.onDataChange(Country_List.java:40)
    at com.google.firebase.database.core.ValueEventRegistration.fireEvent(com.google.firebase:firebase-database@@19.2.1:75)
    at com.google.firebase.database.core.view.DataEvent.fire(com.google.firebase:firebase-database@@19.2.1:63)
    at com.google.firebase.database.core.view.EventRaiser$1.run(com.google.firebase:firebase-database@@19.2.1:55)
    at android.os.Handler.handleCallback(Handler.java:789)
    at android.os.Handler.dispatchMessage(Handler.java:98)
    at android.os.Looper.loop(Looper.java:164)
    at android.app.ActivityThread.main(ActivityThread.java:6541)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
Alex Mamo :

Para solucionar esto, por favor, cambie todas las propiedades en su Countryclase para ser de tipo long, excepto el name, que debe seguir siendo una cadena. Por favor también cambiar todos los setters y getters. Su clase debe tener este aspecto:

public class Country {
    private String name;
    private long total, newCases, totalDeaths, newDeaths, totalRecovered, activeCases, seriousCases;

    public Country() {}

    public Country(String name, long total, long newCases, long totalDeaths, long newDeaths, long totalRecovered, long activeCases, long seriousCases) {
        this.name = name;
        this.total = total;
        this.newCases = newCases;
        this.totalDeaths = totalDeaths;
        this.newDeaths = newDeaths;
        this.totalRecovered = totalRecovered;
        this.activeCases = activeCases;
        this.seriousCases = seriousCases;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public long getTotal() {
        return total;
    }

    public void setTotal(long total) {
        this.total = total;
    }

    public long getNewCases() {
        return newCases;
    }

    public void setNewCases(long newCases) {
        this.newCases = newCases;
    }

    public long getTotalDeaths() {
        return totalDeaths;
    }

    public void setTotalDeaths(long totalDeaths) {
        this.totalDeaths = totalDeaths;
    }

    public long getNewDeaths() {
        return newDeaths;
    }

    public void setNewDeaths(long newDeaths) {
        this.newDeaths = newDeaths;
    }

    public long getTotalRecovered() {
        return totalRecovered;
    }

    public void setTotalRecovered(long totalRecovered) {
        this.totalRecovered = totalRecovered;
    }

    public long getActiveCases() {
        return activeCases;
    }

    public void setActiveCases(long activeCases) {
        this.activeCases = activeCases;
    }

    public long getSeriousCases() {
        return seriousCases;
    }

    public void setSeriousCases(long seriousCases) {
        this.seriousCases = seriousCases;
    }
}

Hay una cosa más que lo que necesita hacer, que es cambiar el tipo de la newCasespropiedad en la base de datos de este tiempo, al ser de tipo largo, ya que es una cadena ahora. Ese signo más ( +no se recomienda) que se añadirán en la base de datos, se debe añadir que mediante programación.

Supongo que te gusta

Origin http://10.200.1.11:23101/article/api/json?id=396118&siteId=1
Recomendado
Clasificación