Довод "против" Problema al listar datos en Firebase Studio Android

Muy buenas, estoy realizando un proyecto en Android Studio conectado подставляет Firebase. А-ля хора de listar el único dato que tengo, СИ меня coloco en la pantalla надел полости tiene que aparecer la aplicación en ошибка y se reinicia, ya он формы probado de varias y никакой consigo arreglar el error.

El código de la clase надел se muestra el dato es:

public class resultado extends AppCompatActivity {
    TextView tvResultado, tv1, tv2, tv3, tv4, tv5, tv6, tvMarca, tvModelo, tvPuertas, tvAño, tvCombustible, tvPrecioDia;

    DatabaseReference databaseReference;



    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_resultado);


        tvResultado = findViewById(R.id.tvResultado);
        tv1 = findViewById(R.id.tv1);
        tv2 = findViewById(R.id.tv2);
        tv3 = findViewById(R.id.tv3);
        tv4 = findViewById(R.id.tv4);
        tv5 = findViewById(R.id.tv5);
        tv6 = findViewById(R.id.tv6);
        tvMarca = findViewById(R.id.tvMarca);
        tvModelo = findViewById(R.id.tvModelo);
        tvPuertas = findViewById(R.id.tvPuertas);
        tvAño = findViewById(R.id.tvAño);
        tvCombustible = findViewById(R.id.tvCombustible);
        tvPrecioDia = findViewById(R.id.tvPrecio);

        databaseReference = FirebaseDatabase.getInstance().getReference("Coches");

        databaseReference.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

                if(dataSnapshot.exists()){

                    String marca = dataSnapshot.child("marca").getValue().toString();
                    String modelo = dataSnapshot.child("modelo").getValue().toString();
                    int puertas = Integer.parseInt(dataSnapshot.child("puertas").getValue().toString());
                    int año = Integer.parseInt(dataSnapshot.child("año").getValue().toString());
                    String combustible = dataSnapshot.child("combustible").getValue().toString();
                    int precioDia = Integer.parseInt(dataSnapshot.child("precioDia").getValue().toString());

                    tvMarca.setText(marca);
                    tvModelo.setText(modelo);
                    tvPuertas.setText(puertas);
                    tvAño.setText(año);
                    tvCombustible.setText(combustible);
                    tvPrecioDia.setText(precioDia);
                }
            }

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

                Toast.makeText(resultado.this,"Se ha producido un error, inténtalo más tarde por favor",Toast.LENGTH_LONG).show();

            }
        });

    }
}

Aquí adjunto una foto de la base de datos: imagen bd RealTime

0
задан 18.12.2019, 20:43
1 ответ

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


Ты делаешь:

FirebaseDatabase.getInstance().getReference("Coches");.

Это дает как оказанный array:

[{"LwP2x1IX5bky7bX_IO7":{"año":2005},{"Combustible":"Diesel"},...}]

, И поскольку края он не совпадает с тем, что ты пробуешь parsear, поэтому эксплуатируй


, Если ты делаешь:

FirebaseDatabase.getInstance().getReference("Coches").getChild("LwP2x1IX5bky7bX_IO7");

даст Тебе как результат:

{{"año":2005},{"Combustible":"Diesel"},...}

И ты не будешь должен менять форму, на которую parseas данные


то, что я рекомендую тебе делать, в случае когда не знал перед рукой Id машины (LwP2x1IX5bky7bX_IO7), меняет форму, в которой parseas вещи. Из-за формы, что он имеет, кажется, что будет несколько машин в будущем, в этом случае ты combiene parsearlo, таким образом:

public void onDataChange(@NonNull DataSnapshot dataSnapshot) { 
  if(dataSnapshot.exists()){
    for (DataSnapshot cocheSnapshot : dataSnapshot.getChildren()) {
      String marca = cocheSnapshot.child("marca").getValue().toString();
      String modelo = cocheSnapshot.child("modelo").getValue().toString();
      int puertas = Integer.parseInt(cocheSnapshot.child("puertas").getValue().toString());
  int año = Integer.parseInt(cocheSnapshot.child("año").getValue().toString());
      String combustible = cocheSnapshot.child("combustible").getValue().toString();
      int precioDia = Integer.parseInt(cocheSnapshot.child("precioDia").getValue().toString());
      //... estos datos los podes guardar en algun modelo y meter el modelo en un array para usarlo despues.
    }
  }
}
0
ответ дан 21.12.2019, 12:13

Теги

Похожие вопросы