java - 当 Firebase 包含列表时应用程序崩溃
问题描述
我有一个应用程序,它保存在 firebase 当前位置(城市名称等)、id 和一个带有点的列表中,这样我就可以保存折线。firebase 导入成功。问题是当我去另一个包含一个列表视图的活动时,应用程序崩溃了。我试图在没有 firebase 列表的情况下使它工作正常。因此,仅当 firebase 包含带有点的列表时,才存在问题。
这是我的火力基地的一个例子。在这里,“ola”是包含点的列表,我只在最后一个。如果我删除最后一个,应用程序可以正常工作。
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)
这就是从 firebase 接收数据的代码:
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) {
}
});
解决方案
这就是问题
Class java.util.List has generic type parameters, please use GenericTypeIndicator instead
List 需要被告知它持有什么样的对象。所以你需要创建一个可以接受变量的模型类ola
首先确保您的 Firebase 数据库结构是
key-|
---city
---....
---ola|
-------0|
---------latitude
---------longitude
-------1|
---------...
然后使用构造函数为 ola 创建一个模型类,其中包含两个对象(纬度和经度)
现在您可以将列表用作
List<Ola> ola;
推荐阅读
- python - 如何在 pycharm 中按顺序运行代码?
- python - 使用python f-string构建sql查询IN子句
- java - 如何搜索我的数组列表以找到保留的动物?
- azure - 在 Terraform 中访问 Azure Function App 系统密钥
- pytorch - 使用 PyTorch 查看数据转换的问题
- python - 从已安装的包中访问由 setuptools-scm 设置的包版本
- jmeter - 断言在 Jmeter 中包含条件失败
- sql - Spring Batch:从第一个选择中读取数据,读取第二个选择并使用两个选择的数据为每个元素创建一个文件
- windows - 为 Microsoft 商店打包适用于 Windows 的 Gtk3 应用程序
- css - Max Mega Menu 中的标签样式