Java JsonMappingException:未找到合适的构造函数

Java JsonMappingException:未找到合适的构造函数,java,android,json,firebase,firebase-realtime-database,Java,Android,Json,Firebase,Firebase Realtime Database,我正在实现他们文档中给出的firebase示例。我面临着这个错误: com.fasterxml.jackson.databind.JsonMappingException:找不到适合类型[simple type,class com.XYZ.$BlogPost]的构造函数:无法从JSON对象实例化(需要添加/启用类型信息吗?) 这是我的密码: public class MainActivity extends Activity { @Override protected

我正在实现他们文档中给出的firebase示例。我面临着这个错误:

com.fasterxml.jackson.databind.JsonMappingException:找不到适合类型[simple type,class com.XYZ.$BlogPost]的构造函数:无法从JSON对象实例化(需要添加/启用类型信息吗?)

这是我的密码:

    public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_user);
        Firebase.setAndroidContext(this);
    }

    @Override
    protected void onStart() {
        super.onStart();
        // Get a reference to our posts
        Firebase ref = new Firebase("https://docs-examples.firebaseio.com/web/saving-data/fireblog/posts");
        // Attach an listener to read the data at our posts reference
        ref.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot snapshot) {
                System.out.println("There are " + snapshot.getChildrenCount() + " blog posts");
                for (DataSnapshot postSnapshot: snapshot.getChildren()) {
                    BlogPost post = postSnapshot.getValue(BlogPost.class);
                    System.out.println(post.getAuthor() + " - " + post.getTitle());
                }
            }
            @Override
            public void onCancelled(FirebaseError firebaseError) {
                System.out.println("The read failed: " + firebaseError.getMessage());
            }
        });
    }
public class BlogPost {
        private String author;
        private String title;
        public BlogPost() {
            // empty default constructor, necessary for Firebase to be able to deserialize blog posts
        }
        public String getAuthor() {
            return author;
        }
        public String getTitle() {
            return title;
        }
    }
}
我已经讨论了很多关于同一件事的问题,包括反序列化JSON所需的空构造函数。我已经包括了这一点,但我仍然无法解决这个问题。这是我正在尝试反序列化的JSON:

{  
   "-JRHTHaIs-jNPLXOQivY":{  
      "author":"gracehop",
      "title":"Announcing COBOL, a New Programming Language"
   },
   "-JRHTHaKuITFIhnj02kE":{  
      "author":"alanisawesome",
      "title":"The Turing Machine"
   }
}

我不知道我的代码中缺少了什么。非常感谢您对这方面的任何帮助。

在以下行中添加构造函数:

public BlogPost(String author,String title) {
    this.author=author;
    this.title=title;
}
但是,您也可能需要重新定义
BlogPost
,以:

class BLogPost {
  public BlogPost() { }
  String postId;
  List<SomeObject> someObject;
  Getters/setters
}
classblogpost{
公共BlogPost(){}
字符串posted;
列出某个对象;
能手/二传手
}

其中
SomeObject
是您当前的
BLogPost
类。

您的JSON文件无效。
免费的在线JSON验证器:

Firebase使用
-jrhhais-jNPLXOQivY
作为对象的密钥

{
 author: "gracehop"
 title: "Announcing COBOL, a New Programming Language"
}
您必须将其用作访问对象的键。您必须向api发送正确的请求。在这种情况下,它将是

如果你想从Firebase接收一个数组,你必须这样存储它

posts{
     "1":{
          author: "gracehop"
          title: "Announcing COBOL, a New Programming Language"
        },
     "2":{
         author: "alanisawesome"
         title: "The Turing Machine"
        }
}
Firebase对阵列没有本机支持。如果存储一个数组,它实际上会被存储为一个“对象”,以整数作为键名


我猜你的
BlogPost
课程是你活动的内部课程。在这种情况下,Java会向引用包含对象的每个对象添加一个隐藏字段。这个隐式字段当然不会出现在JSON数据中

要解决这个问题,您应该将
BlogPost
类保存在一个单独的文件中(这样它就不是一个内部类),或者将其标记为一个静态类(这样可以删除隐式字段):


“-JRHTHaIs jNPLXOQivY”值没有键,列表没有用逗号分隔,json对象已损坏您可以从链接查看json:
public static class BlogPost {