2017-02-28 4 views
1

Firebaseの投稿にタイムスタンプを追加しようとしていますが、残念ながら失敗です。私はすでにstackoverflowから多くのアドバイスを試みましたが、うまくいきませんでした。各投稿の下にタイムスタンプフィールドを追加する方法を教えてください。AndroidのFirebaseデータベースにタイムスタンプを投稿できません

私のコードで何が間違っているのか分かります。

final DatabaseReference newPost = mDatabase.push(); 
mDatabaseUser.addValueEventListener(new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 

     Long timestamp = (Long) dataSnapshot.getValue(); 
     System.out.println(timestamp); 

     newPost.child("title").setValue(title_val); 
     newPost.child("desc").setValue(desc_val); 
     newPost.child("image").setValue(downloadUrl.toString()); 
     newPost.child("uid").setValue(mCurrentUser.getUid()); 
     newPost.child("username").setValue(dataSnapshot.child("name").getValue()).addOnCompleteListener(new OnCompleteListener<Void>() { 
      @Override 
      public void onComplete(@NonNull Task<Void> task) { 

       if (task.isSuccessful()) { 

        startActivity(new Intent(PostActivity.this, MainActivity.class)); 
       } 
      } 
     }); 

    } 

    @Override 
    public void onCancelled(DatabaseError databaseError) { 

    } 
}); 

mDatabaseUser.setValue(ServerValue.TIMESTAMP); 
mProgress.dismiss(); 

Firebaseデータベースの構造:

{ 
    "Blog":{ 
     "-Ke1osQRFVs0fuqx9n18":{ 
     "desc":"again again", 
     "uid":"FBwMzHJGP4U10LnLOwluy4BVyJ52", 
     "username":"OziBoo" 
     } 
    }, 
    "Users":{ 
     "vi6Qd1AafidNGGV4roBhdLPZYGN2":{ 
     "image":"firebasestorage.googleapis.com/v0/b/agrodesk-b30ff.appspot.‌​com/...", 
     "name":"Ozi" 
     } 
    } 
} 
+0

Firebaseの構造と達成目標を教えてください。 –

+0

{ "ブログ":{ "-Ke1osQRFVs0fuqx9n18":{ "DESC": "もう一度もう一度"、 "UID": "FBwMzHJGP4U10LnLOwluy4BVyJ52"、 "ユーザー名": "OziBoo" }} 、 「ユーザー":{ " vi6Qd1AafidNGGV4roBhdLPZYGN2 ":{ "画像 ":" https://firebasestorage.googleapis.com/v0/b/agrodesk-b30ff.appspot.com/o/Profile_images%2Fcropped-377289343.jpg?alt=media&token = 5cf3ae8f-66af-43bd-bb8e-a9ee8e1250ff」、 "名": "OZI" }} }あなたの助け –

+0

おかげで私はあなたの質問を編集し、構造int型を追加しましたそれ。次回は、あなたの質問に関する詳細な情報を追加したい場合は、コメントで言及するのではなく、編集することができます:) –

答えて

0

誤りや悪用の多くは、あなたのコードにあります。最初にこれを理解してください:

  • ref.addValueEventListener(...)ref
  • ref.setValue(yourValue)によって参照されるデータで行われたすべての変更を聴くために使用され、あなたがしたい場合に使用されrefオブジェクト
  • setValue(...).addOnCompleteListener(...)を参照するデータの値を設定するために使用されます値が更新された後に何かを実行する

私が正しく理解すれば、値をデータベースに書き込むために書くすべてのサンプルコードでしょうか?しかし、あなたは故意にではなく、addValueEventListener()を代わりに使用しました。

ので"Blog"の内側に新しい子に値を書き込むために、あなたのコードは次のようにする必要があります:

// Here I use HashMap to make it more simple 
// You can (and better to) use your custom object as value container 
HashMap<String, Object> value = new HashMap<>(); 
value.put("title", "your-title"); 
value.put("desc", "your-desc"); 
value.put("timestamp", ServerValue.TIMESTAMP); 
// ... etc 

// the following code will create a reference object pointing at "Blog" 
DatabaseReference ref = FirebaseDatabase.getInstance().getRreference("Blog"); 

// the following code will make a new child inside data referenced by ref (in this case, "Blog") 
DatabaseReference newBlog = ref.push(); 

// the following code is the code that actually update the data of referenced point 
newBlog.setValue(value) 
    // addOnCompleteListener is optional 
    .addOnCompleteListener(new ... { 
     // code placed here will be executed when your data is updated 
     ... 
    }); 

は、この情報がお役に立てば幸いです。

注:

あり、私はちょうどあなたがこのような場合にのみこのような場合のために達成したいものをお見せ

。 Firebase Databaseに関するドキュメント、ガイド、チュートリアルをお読みください。それは長くかかるかもしれませんが、一度理解すれば、実際には非常に簡単です。

関連する問題