Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/225.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Firestore在检索类时崩溃,请求空构造函数,但已经有一个构造函数_Java_Android_Google Cloud Firestore - Fatal编程技术网

Java Firestore在检索类时崩溃,请求空构造函数,但已经有一个构造函数

Java Firestore在检索类时崩溃,请求空构造函数,但已经有一个构造函数,java,android,google-cloud-firestore,Java,Android,Google Cloud Firestore,这一行: ProjectMap m = document.toObject(ProjectMap.class); 生成错误: E/AndroidRuntime:致命异常:主 进程:com.dockdogs.lorecords,PID:5633 java.lang.RuntimeException:无法反序列化对象。类com.dockdogs.lorecords.preferences.MapPreference$Bubble未定义无参数构造函数。如果您使用的是ProGuard,请确保未剥离这些

这一行:

ProjectMap m = document.toObject(ProjectMap.class);
生成错误:

E/AndroidRuntime:致命异常:主 进程:com.dockdogs.lorecords,PID:5633 java.lang.RuntimeException:无法反序列化对象。类com.dockdogs.lorecords.preferences.MapPreference$Bubble未定义无参数构造函数。如果您使用的是ProGuard,请确保未剥离这些构造函数(在“preferences.mapBubble”字段中找到) 位于com.google.firebase.firestore.util.CustomClassMapper.deserializeError(CustomClassMapper.java:563) 在com.google.firebase.firestore.util.CustomClassMapper.access$200(CustomClassMapper.java:54) 在com.google.firebase.firestore.util.CustomClassMapper$BeanMapper.deserialize上(CustomClassMapper.java:749) 在com.google.firebase.firestore.util.CustomClassMapper$BeanMapper.deserialize上(CustomClassMapper.java:741) 位于com.google.firebase.firestore.util.CustomClassMapper.convertBean(CustomClassMapper.java:542) 位于com.google.firebase.firestore.util.CustomClassMapper.deserializeToClass(CustomClassMapper.java:253) 位于com.google.firebase.firestore.util.CustomClassMapper.DeserializeType(CustomClassMapper.java:189) 在com.google.firebase.firestore.util.CustomClassMapper.access$300(CustomClassMapper.java:54) 在com.google.firebase.firestore.util.CustomClassMapper$BeanMapper.deserialize上(CustomClassMapper.java:778) 在com.google.firebase.firestore.util.CustomClassMapper$BeanMapper.deserialize上(CustomClassMapper.java:741) 位于com.google.firebase.firestore.util.CustomClassMapper.convertBean(CustomClassMapper.java:542) 位于com.google.firebase.firestore.util.CustomClassMapper.deserializeToClass(CustomClassMapper.java:253) 位于com.google.firebase.firestore.util.CustomClassMapper.DeserializeType(CustomClassMapper.java:189) 在com.google.firebase.firestore.util.CustomClassMapper.access$300(CustomClassMapper.java:54) 在com.google.firebase.firestore.util.CustomClassMapper$BeanMapper.deserialize上(CustomClassMapper.java:770) 在com.google.firebase.firestore.util.CustomClassMapper$BeanMapper.deserialize上(CustomClassMapper.java:741) 位于com.google.firebase.firestore.util.CustomClassMapper.convertBean(CustomClassMapper.java:542) 位于com.google.firebase.firestore.util.CustomClassMapper.deserializeToClass(CustomClassMapper.java:253) 位于com.google.firebase.firestore.util.CustomClassMapper.convertToCustomClass(CustomClassMapper.java:100) 位于com.google.firebase.firestore.DocumentSnapshot.toObject(DocumentSnapshot.java:183) 在com.google.firebase.firestore.QueryDocumentSnapshot.toObject(QueryDocumentSnapshot.java:116)上 位于com.google.firebase.firestore.DocumentSnapshot.toObject(DocumentSnapshot.java:161) 在com.google.firebase.firestore.QueryDocumentSnapshot.toObject(QueryDocumentSnapshot.java:97)上 位于com.dockdogs.lorecords.SaveSystem$26.onComplete(SaveSystem.java:488) 在com.google.android.gms.tasks.zzj.run上(com.google.android.gms:play services tasks@@17.2.0:4) 位于android.os.Handler.handleCallback(Handler.java:938) 位于android.os.Handler.dispatchMessage(Handler.java:99) 位于android.os.Looper.loop(Looper.java:246) 位于android.app.ActivityThread.main(ActivityThread.java:8512) 位于java.lang.reflect.Method.invoke(本机方法) 位于com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:602) 位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1130)

ProjectMap看起来就像:

public class ProjectMap implements Serializable {
    public int height=0;
    public int width=0;
    public String id = "";
    public int scaleRatio = 1; //FOR ZOOMING THE MAP IN AND OUT
    public String mapTitle, mapPath; //map path = image path
    public boolean ISCURRENT = false; //the map that's currently being used by the user
    public ArrayList<MapEvent> mapEvents = new ArrayList<MapEvent>();
    private MapPreference preferences = new MapPreference();

}
public class MapPreference implements Serializable {
    //Controls scale for map bitmap
    public  float minScaleX = 0.50f;
    public  float maxScaleX = 8f;
    public  float minScaleY = 0.50f;
    public  float maxScaleY = 8f;
    //end controls for scaling map bitmap


    public Dagger mapDagger = new Dagger();

    public Bubble mapBubble = new Bubble();


    public  boolean useGridLines = true;

    public  int gridCols = 0;
    public  int gridRows = 0;

    public MapPreference() {
    }


    public  void setGridRows(int gridRows) { this.gridRows = gridRows; }
    public  void setGridCols(int gridCols) { this.gridCols = gridCols; }

    //will the user have grid lines on their map?
    public  void setUseGridLines(boolean useGridLines) { this.useGridLines = useGridLines; }

    public  boolean GetUseGridLines() { return useGridLines; }

    public  int GetGridCols(){
        return gridCols;
    }
    public  int GetGridRows(){
        return gridRows;
    }

    public  float GetMinScaleX(){
        return minScaleX;
    }
    public  float GetMinScaleY(){
        return minScaleY;
    }
    public  float GetMaxScaleX(){
        return maxScaleX;
    }
    public  float GetMaxScaleY(){
        return maxScaleY;
    }
    //TODO: add a preferences page for these options
    public  void SetMinScaleX(float _minScaleX){
        minScaleX = _minScaleX;
    }
    public  void SetMinScaleY(float _minScaleY){
        minScaleY = _minScaleY;
    }
    public  void SetMaxScaleX(float _maxScaleX){
        maxScaleX = _maxScaleX;
    }
    public  void SetMaxScaleY(float _maxScaleY){
        maxScaleY = _maxScaleY;
    }


    public class Dagger implements Serializable  {
        public  float minScaleX = 0.75f;
        public  float maxScaleX = 1f;
        public  float minScaleY = 0.75f;
        public  float maxScaleY = 1f;
        public  float GetMinScaleX(){
            return minScaleX;
        }
        public  float GetMinScaleY(){
            return minScaleY;
        }
        public  float GetMaxScaleX(){
            return maxScaleX;
        }
        public  float GetMaxScaleY(){
            return maxScaleY;
        }
        //TODO: add a preferences page for these options
        public  void SetMinScaleX(float _minScaleX){
            minScaleX = _minScaleX;
        }
        public  void SetMinScaleY(float _minScaleY){
            minScaleY = _minScaleY;
        }
        public  void SetMaxScaleX(float _maxScaleX){
            maxScaleX = _maxScaleX;
        }
        public  void SetMaxScaleY(float _maxScaleY){
            maxScaleY = _maxScaleY;
        }

        public Dagger(){

        }
    }

    public class Bubble implements Serializable {
        public  float minScaleX = 0.75f;
        public  float maxScaleX = 1f;
        public  float minScaleY = 0.75f;
        public  float maxScaleY = 1f;
        public  float GetMinScaleX(){
            return minScaleX;
        }
        public  float GetMinScaleY(){
            return minScaleY;
        }
        public  float GetMaxScaleX(){
            return maxScaleX;
        }
        public  float GetMaxScaleY(){
            return maxScaleY;
        }
        //TODO: add a preferences page for these options
        public  void SetMinScaleX(float _minScaleX){
            minScaleX = _minScaleX;
        }
        public  void SetMinScaleY(float _minScaleY){
            minScaleY = _minScaleY;
        }
        public  void SetMaxScaleX(float _maxScaleX){
            maxScaleX = _maxScaleX;
        }
        public  void SetMaxScaleY(float _maxScaleY){
            maxScaleY = _maxScaleY;
        }

        public Bubble() {

        }
    }

}
我想知道是否使用Firestore无法正确检索浮动,但如果这是真的,我不确定我能做些什么


此外,这不是一个重复的问题,因为该类已经有一个空构造函数,它仍然抛出错误。

这些类中的一些类似乎是其他类的内部类。在这种情况下,还需要将内部类标记为
static
。否则,默认构造函数将需要Firestore无法为您填充的隐式
outer
参数

因此:

另请参见(对于实时数据库,但逻辑相同):


嘿,亚当。你有什么收获吗?你看到我下面的答案了吗?你有机会试试吗?嘿,弗兰克。是的,我能够使这些内部类保持静态,这就是我所做的。谢谢
static public class Bubble ...