Сбой приложения, когда Firebase содержит список - PullRequest
0 голосов
/ 13 сентября 2018

У меня есть приложение, которое сохраняет в текущем местоположении Firebase (название города и т. Д.), Идентификатор и список с точками, чтобы я мог сохранить полилинию. Импорт в Firebase является успешным. Проблема заключается в том, что когда я перехожу к другой деятельности, которая содержит просмотр списка со всеми названиями городов в базе данных, происходит сбой приложения. Я попытался сделать это без списка в firebase и работает нормально. Так что проблема существует только тогда, когда firebase содержит список с точками.

Это пример моей базы огня. Здесь "ola" - это список, который содержит точки, и он у меня есть только в последнем. Если я удаляю последний, приложение работает нормально.

enter image description here

import java.util.List;




public class Paths {
String id;
String name;
String city;
String nomos;
String perifereia;
List<Ola> ola;



public Paths(){

}



public Paths(String id, String name, String city, String nomos, String perifereia, List<Ola> ola) {
    this.id = id;
    this.name = name;
    this.city = city;
    this.nomos = nomos;
    this.perifereia = perifereia;
    this.ola = ola;

}

public String getId() {
    return id;
}

public String getName() {
    return name;
}

public String getCity() {
    return city;
}

public String getNomos() {
    return nomos;
}

public String getPerifereia() {
    return perifereia;
}

public List<Ola> getOla() {
    return ola;
}

.

public class Ola {

public double latitude;
public double longitude;


public Ola() {}


public Ola(double latitude, double longitude) {
    this.latitude = latitude;
    this.longitude = longitude;
}

public double getLatitude() {
    return latitude;
}

public void setLatitude(double latitude) {
    this.latitude = latitude;
}

public double getLongitude() {
    return longitude;
}

public void setLongitude(double longitude) {
    this.longitude = longitude;
}

}

А вот и ошибка:

E/AndroidRuntime: FATAL EXCEPTION: main
              Process: com.example.spiros.mypath, PID: 28814
              com.google.firebase.database.DatabaseException: Can't convert object of type java.util.ArrayList to type com.example.spiros.mypath.Ola
                  at com.google.android.gms.internal.firebase_database.zzkt.zzb(Unknown Source)
                  at com.google.android.gms.internal.firebase_database.zzkt.zza(Unknown Source)
                  at com.google.android.gms.internal.firebase_database.zzkt.zza(Unknown Source)
                  at com.google.android.gms.internal.firebase_database.zzkt.zzb(Unknown Source)
                  at com.google.android.gms.internal.firebase_database.zzku.zza(Unknown Source)
                  at com.google.android.gms.internal.firebase_database.zzkt.zzb(Unknown Source)
                  at com.google.android.gms.internal.firebase_database.zzkt.zza(Unknown Source)
                  at com.google.firebase.database.DataSnapshot.getValue(Unknown Source)
                  at com.example.spiros.mypath.CitiesList$1.onDataChange(CitiesList.java:44)
                  at com.google.android.gms.internal.firebase_database.zzfc.zza(Unknown Source)
                  at com.google.android.gms.internal.firebase_database.zzgx.zzdr(Unknown Source)
                  at com.google.android.gms.internal.firebase_database.zzhd.run(Unknown Source)
                  at android.os.Handler.handleCallback(Handler.java:761)
                  at android.os.Handler.dispatchMessage(Handler.java:98)
                  at android.os.Looper.loop(Looper.java:156)
                  at android.app.ActivityThread.main(ActivityThread.java:6595)
                  at java.lang.reflect.Method.invoke(Native Method)
                  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:942)
                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:832)

И это код, который получает данные из базы данных:

    databasePaths = FirebaseDatabase.getInstance().getReference("Paths");

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

            for (DataSnapshot items: dataSnapshot.getChildren())
            {
                info = items.getValue(Paths.class);
                ArrayListCities.add(info.city);

            }


            adapterCities = new ArrayAdapter<>(CitiesList.this, android.R.layout.simple_list_item_1, ArrayListCities);
            ListViewCities.setAdapter(adapterCities);
            adapterCities.notifyDataSetChanged();


            ListViewCities.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                    String selectedFromListCities = (ListViewCities.getItemAtPosition(position).toString());



                    Intent IntentGoN = new Intent(getApplicationContext(), FullListByCity.class);
                    IntentGoN.putExtra("city", selectedFromListCities);
                    startActivity(IntentGoN);

                }
            });

        }

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

        }
    });

1 Ответ

0 голосов
/ 13 сентября 2018

Это проблема

Class java.util.List has generic type parameters, please use GenericTypeIndicator instead

Список должен быть указан, какие объекты он содержит.Поэтому вам нужно создать класс модели, который может принимать переменную ola

Сначала убедитесь, что структура вашей базы данных firebase равна

key-|
---city
---....
---ola|
-------0|
---------latitude
---------longitude
-------1|
---------...

Затем создайте класс модели для ola с двумяобъекты (широта и долгота) с конструкторами

И теперь вы можете использовать список как

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