1

I have seen other posts but it seems none of the solution fits my issue. The error is at the method FirebaseRef.setValue()

I'm trying to save data into to a Firebase server. At first I thought the error was because I tried to save the data as a custom object, then I tried to save it as a basic hash (I followed the tutorial in this link)

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;
        }

Error message:

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.
2
  • 1
    you don't need to use AsyncTack for doing firebase operations, firebase is already optimised and every network related operations run on the background thread. Commented Sep 26, 2016 at 13:14
  • I'm not sure how you could get that error message from writing a HashMap. Can you double-check it's correct given your code sample? Commented Sep 26, 2016 at 15:51

1 Answer 1

5

The completion listener on your call to setValue() is from the legacy 2.x.x SDK: Firebase.CompletionListener(). You must use the completion listener from the new 9.x.x SDK, DatabaseReference.CompletionListener().

The two SDKs are not compatible. You should use the new SDK exclusively. Update your build.gradle to remove:

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

See the Upgrade Guide for more details.

Sign up to request clarification or add additional context in comments.

1 Comment

Good catch qbix! embarrassingly enough both Michael and myself overlooked that. Thanks for helping other Firebase developers!

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.