Firebase setvalue DatabaseException:无法使用类类解析节点

时间:2016-09-26 12:49:34

标签: android firebase firebase-realtime-database

我看过其他帖子,但似乎没有一个解决方案适合我的问题。错误发生在方法FirebaseRef.setValue()

我试图将数据保存到Firebase server。起初我认为错误是因为我试图将数据保存为自定义对象,然后我尝试将其保存为基本哈希(我遵循this链接中的教程)

protected Boolean doInBackground(Void... params) {
            // Database Connection, if no connection or what not, exception will be here
            mDatabase = FirebaseDatabase.getInstance().getReference();
            Log.d(DBTAG, mDatabase.toString());

            // 'child database'
            mBooksDatabase = mDatabase.child("books");
            mCurrentUser = mDatabase.child("users").child(mUserEmail);

            // address to upload the book, later we can call newBookRef.getKey() to get the ID
            // and use the ID to indicate the relationship between the owner and the book
            final DatabaseReference newBookRef = mBooksDatabase.push();
            try {
                Map<String, String> mBookTest = new HashMap<String, String>();
                mBookTest.put("ISBN", "9781566199094");
                mBookTest.put("title", "Book of Love");
                newBookRef.setValue(mBookTest, new Firebase.CompletionListener() {
                    @Override
                    public void onComplete(FirebaseError firebaseError, Firebase firebase) {
                        if (firebaseError != null) {
                            Log.e(DBTAG, "Data could not be saved. " + firebaseError.getMessage());
                        } else {
                            Log.d(DBTAG, "Data saved successfully.");
                            // update the 'owns' list in user's data
                            final String bookRef = newBookRef.getKey();
                            mCurrentUser.child("owns").child(bookRef).setValue("1");
                            //TODO: we can use this to count how many of the same books an user has
                        }
                    }
                });
            } catch (DatabaseException e){
                Log.e(DBTAG, "Error occurred", e);
            }
            // if owner is desired in book, we can modify this part

            return true;
        }

错误讯息:

09-26 20:37:12.631 5091-5399/bookjobs.bookjobs D/DB in BookController: https://bookjobs-6c56f.firebaseio.com
09-26 20:37:12.641 5091-5399/bookjobs.bookjobs E/DB in BookController: Error occurred
                                                                       com.google.firebase.database.DatabaseException: Failed to parse node with class class bookjobs.bookjobs.BookController$UploadBookTask$1
                                                                           at com.google.android.gms.internal.zzakk.zza(Unknown Source)
                                                                           at com.google.android.gms.internal.zzakk.zzbq(Unknown Source)
                                                                           at com.google.android.gms.internal.zzakn.zzbr(Unknown Source)
                                                                           at com.google.firebase.database.DatabaseReference.setValue(Unknown Source)
                                                                           at bookjobs.bookjobs.BookController$UploadBookTask.doInBackground(BookController.java:59)
                                                                           at bookjobs.bookjobs.BookController$UploadBookTask.doInBackground(BookController.java:30)
                                                                           at android.os.AsyncTask$2.call(AsyncTask.java:295)
                                                                           at java.util.concurrent.FutureTask.run(FutureTask.java:237)
                                                                           at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234)
                                                                           at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
                                                                           at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
                                                                           at java.lang.Thread.run(Thread.java:818)
09-26 20:37:15.831 5091-5169/bookjobs.bookjobs W/DynamiteModule: Local module descriptor class for com.google.firebase.auth not found.

1 个答案:

答案 0 :(得分:4)

致电setValue()时的完成监听器来自旧版2.x.x SDK:Firebase.CompletionListener()。您必须使用新的9.x.x SDK DatabaseReference.CompletionListener()中的完成侦听器。

这两个SDK不兼容。您应该专门使用新的SDK。更新您的build.gradle以删除:

compile 'com.firebase:firebase-client-android:2.x.x'

有关详细信息,请参阅Upgrade Guide