我将坐标存储在实时数据库中,并且在尝试检索数据时收到错误消息。错误消息是
com.google.firebase.database.DatabaseException:类com.google.android.gms.maps.model.LatLng缺少没有参数的构造函数
...
在com.google.firebase.database.DataSnapshot.getValue(未知来源)
这是代码
Main.java
protected void onStart() {
apiClient.connect();
super.onStart();
DatabaseReference test = database.getReference("jsierra");
test.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
Toast.makeText(getBaseContext(), "Child Added", Toast.LENGTH_LONG).show();
givenData = dataSnapshot.getValue(data.class); <-- Error
}
}
data.java
import com.google.android.gms.maps.model.LatLng;
public class data {
private LatLng coordinates;
public data() {
coordinates = null;
}
public data(LatLng coordinates)
{
this.coordinates = coordinates;
}
public void setLatLng(LatLng coordinates) {
this.coordinates = coordinates;
}
LatLng getLatLng () {
return coordinates;
}
}
答案 0 :(得分:11)
创建您自己的LatLng
模型类,而不是使用Google地图库中的模型类,因为它在实现中缺少公共构造函数。
public class LatLng {
private Double latitude;
private Double longitude;
public LatLng() {}
... public getter ...
}
编辑:如何将此LatLng
转换为com.google.android.gms.maps.model.LatLng
com.google.android.gms.maps.model.LatLng mapsLatLng =
new com.google.android.gms.maps.model.LatLng(latLng.getLatitude(),
latLng.getLongitude());
答案 1 :(得分:1)
当我尝试将Timestamp传递给数据库时,我遇到了类似的问题。虽然getter工作并且我的数据通过push正确设置为实时数据库,但是使用来自ChildEventListener的DataSnapshot读取数据会导致我的应用程序崩溃,因为Timestamp类也没有没有争论的公共cunstructor。 所以我创建了自己的类Timestamp,它扩展了原始的java Timestamp类,添加了缺少公共构造函数而没有争论。
public class Timestamp extends java.sql.Timestamp {
public Timestamp(long time) {
super(time);
}
public Timestamp(){
super(System.currentTimeMillis());
}
然后我必须包括所需的setter(从使用我的新类时的警告中读取)