Firebaseを2つの項目でテストしています。私は、firebase onChildAdded()リスナーが更新するようにrecyclerviewを促すアイテムを追加するように、recyclerviewを更新したいと考えています。ここでFirebase String NullPointer項目
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からデータを取得するために使用することを、別のフラグメントに、されています:ここで私は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);
}
をそしてここでエラーです。エラーが「文字列newPollQuestion」でプロンプト表示されるので、かなり奇妙です。私は "newPollImageURL"をFirebaseに書き込むために全く同じメソッドを使用していますが、そのオブジェクトはnullではありません。また、AとBの2つのデバイスがあります。Aはアイテムを作成してFirebaseに書き込み、それを正常に読み取ります。
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
データベースに入ったデータのJSONエクスポートを実行できますか? – vzsg
どうやってそれをしますか? 2番目のデバイスでfirebaseが更新されている画面やアクティビティに積極的に参加している場合、エラーが発生するため、これは変です。しかし、私が別のスクリーン/アクティビティを使用していて、そのスクリーン/アクティビティに移動すると、すべてがうまくロードされます。 – tccpg288