我正在实现他们文档中提供的firebase示例。我遇到此错误:
com.fasterxml.jackson.databind.JsonMappingException:没有为类型[简单类型,类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" } }
我不知道我的代码中缺少什么。感谢您提供任何帮助,以帮助解决此问题。
我猜你的BlogPost课堂是你活动的 内在课堂 。在这种情况下,Java会向每个引用包含对象的对象添加一个隐藏字段。而且,此隐式字段当然不会出现在JSON数据中。
BlogPost
要解决此问题,您应该将BlogPost类保留在单独的文件中(这样就不是内部类),或者将其标记为静态类(这将删除隐式字段):
public static class BlogPost {