firebase字符串项目上的nullpointer



我正在两个项目上测试firebase。我希望更新一个recyclerview以添加一个项目,并使用Firebase Onchildadded()侦听器提示RecyClerview进行更新。这是我写入firebase的代码:

 mSubmitPollCreation.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            //TODO: Need to determine if this is proper epoch - i.e. does it account for time zones
            Calendar c = Calendar.getInstance();
            final String epochTime = String.valueOf(c.getTimeInMillis());
            //TODO: Need to check if poll requirements are added, i.e. Question, Answer, ......
            //check if image has been loaded first
            if (resultImageURL != null){
                mBaseRef.child("Polls").child(epochTime).child("Image_URL").setValue(resultImageURL);
            } else {
                Toast.makeText(getApplicationContext(),getResources().getString(R.string.no_image_selected),Toast.LENGTH_LONG).show();
                return;
            }
            //Add Answer Counter defaulted to 0
            Map<String, Object> pollAnswerCounter = new HashMap<String, Object>();
            pollAnswerCounter.put("Vote_Count", 0);
            mBaseRef.child("Polls").child(epochTime).updateChildren(pollAnswerCounter);
            //Add Question
            Map<String, Object> pollQuestion = new HashMap<String, Object>();
            pollQuestion.put("Question", mCreatePollQuestion.getText().toString());
            mBaseRef.child("Polls").child(epochTime).updateChildren(pollQuestion);
            if (mNumberOfPollAnswersCreatedByUser > 5){
                Toast.makeText(getApplicationContext(),getResources().getText(R.string.poll_answers_greater_than_five),Toast.LENGTH_LONG).show();
                mNumberOfPollAnswersCreatedByUser = 5;
            }
            //add answers to Firebase
            for (int i = 0; i < mNumberOfPollAnswersCreatedByUser; i++){
                EditText editText = (EditText) mEditTextAnswerLayout.findViewWithTag(getResources().getString(R.string.created_answer_editText_id)+String.valueOf(i+1));
                String editTextInputForAnswer = String.valueOf(editText.getText());
                final String answerLabel = "Answer";
                Map<String, Object> answerChoice = new HashMap<String, Object>();
                answerChoice.put(answerLabel, editTextInputForAnswer);
                mBaseRef.child("Polls").child(epochTime).child("Answers").child(String.valueOf(i+1)).updateChildren(pollAnswerCounter);
                mBaseRef.child("Polls").child(epochTime).child("Answers").child(String.valueOf(i+1)).updateChildren(answerChoice);
                Toast.makeText(getApplicationContext(),editTextInputForAnswer,Toast.LENGTH_SHORT).show();
            }
            Intent toHomeActivity = new Intent(CreateActivity.this, HomeActivity.class);
            toHomeActivity.putExtra("viewpager_position", 2);
            startActivity(toHomeActivity);
        }
    });

这是我用来从firebase检索数据的代码:

@Override
public void onStart() {
    super.onStart();
    mChildEventListener = new ChildEventListener() {
        @Override
        public void onChildAdded(DataSnapshot dataSnapshot, String s) {
            String newPollEpoch = dataSnapshot.getKey();
            Log.v("Child_Added", "The new child is " + newPollEpoch);
            String newPollImageURL = dataSnapshot.child(IMAGE_URL).getValue().toString();
            String newPollQuestion = dataSnapshot.child(QUESTION_STRING).getValue().toString();
            mNewPollsAray.add(0, new Poll(newPollQuestion, newPollImageURL, newPollEpoch));
            mNewPollsAdapter.notifyDataSetChanged();
        }

        @Override
        public void onChildChanged(DataSnapshot dataSnapshot, String s) {
        }
        @Override
        public void onChildRemoved(DataSnapshot dataSnapshot) {
        }
        @Override
        public void onChildMoved(DataSnapshot dataSnapshot, String s) {
        }
        @Override
        public void onCancelled(DatabaseError databaseError) {
        }
    };
    mPollsRef.addChildEventListener(mChildEventListener);
}
@Override
public void onStop() {
    super.onStop();
    mPollsRef.removeEventListener(mChildEventListener);
}

这是错误。这很奇怪,因为错误正在提示" String NewPollQuestion"上。我使用完全相同的方法将" newpollimageurl"写入firebase,而该对象不是零。另外,有2个设备,A和B。A可以创建并将项目写入Firebase,然后读取它。B是显示以下设备:

12-03 16:21:20.255 21043-21043/com.troychuinard.fanpolls E/AndroidRuntime: FATAL EXCEPTION: main
                                                                       Process: com.troychuinard.fanpolls, PID: 21043
                                                                       java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.Object.toString()' on a null object reference
                                                                           at com.troychuinard.fanpolls.Fragment.NewFragment$1.onChildAdded(NewFragment.java:159)
                                                                           at com.google.android.gms.internal.zzaip.zza(Unknown Source)
                                                                           at com.google.android.gms.internal.zzakp.zzcxi(Unknown Source)
                                                                           at com.google.android.gms.internal.zzaks$1.run(Unknown Source)
                                                                           at android.os.Handler.handleCallback(Handler.java:739)
                                                                           at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                           at android.os.Looper.loop(Looper.java:148)
                                                                           at android.app.ActivityThread.main(ActivityThread.java:5417)
                                                                           at java.lang.reflect.Method.invoke(Native Method)
                                                                           at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
                                                                           at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

                                                                       --------- beginning of system

我不明白为什么,而是更改:

String newPollQuestion = dataSnapshot.child(QUESTION_STRING).getValue.toString;

to:

String newPollQuestion = dataSnapshot.child(QUESTION_STRING).getValue(String.class);

成功删除了NullPointer。知道为什么?

最新更新