JsonMappingException:找不到合适的构造函数
我正在实现他们的文档中给出的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" } }
我不知道我的代码中缺少什么。 任何有助于重塑这一点的帮助表示赞赏。
我猜你的BlogPost
类是你活动的内部类 。 在这种情况下,Java会为引用包含对象的每个对象添加一个隐藏字段。 此隐式字段当然不会出现在您的JSON数据中。
要解决这个问题,您应该将BlogPost
类保存在单独的文件中(以便它不是内部类)或将其标记为静态类(删除隐式字段):
public static class BlogPost {
添加一个构造函数:
public BlogPost(String author,String title) { this.author=author; this.title=title; }
但是,您也可以将BlogPost
重新定义为:
class BLogPost { public BlogPost() { } String postId; List someObject; Getters/setters }
其中SomeObject
是您当前的BLogPost
类。
您的JSON文件无效。 免费的在线JSONvalidation器: http : //jsonlint.com/
Firebase使用-JRHTHaIs-jNPLXOQivY
作为对象的键
{ author: "gracehop" title: "Announcing COBOL, a New Programming Language" }
您必须使用此作为访问对象的键。 您必须向api发送正确的请求。 在这种情况下它将是
https://docs-examples.firebaseio.com/web/saving-data/fireblog/posts/-JRHTHaIs-jNPLXOQivY
如果您想从Firebase接收数组,则必须像这样存储它。
posts{ "1":{ author: "gracehop" title: "Announcing COBOL, a New Programming Language" }, "2":{ author: "alanisawesome" title: "The Turing Machine" } }
Firebase没有对arrays的本机支持。 如果存储数组,它实际上存储为“对象”,整数作为键名。
有关更多信息,请查看此Firebase博客文章
- Caught Throwable或Exception为null
- 为什么LocalBroadCastManager从IntentService发送的意图没有被Activity类中的BroadCastReceiver接收?
- 使用phpseclibvalidation在Java(Android)中生成的SHA1withRSA签名
- Apple的pListforms的XML可以通过Android Java解析吗?
- 从互联网解析xml(yr.no)
- java.lang.NullPointerException:尝试调用虚方法’java.lang.String android.net.Uri.getScheme()’
- android audioRecord-应用变化的增益
- Gmail api范围和格式不匹配
- Android:连续点击一到六个按钮将不同的结果串在一起