[英]How to retrieve time stamp from Firebase child Android
我正在創建一個社交應用程序,當有人上傳帖子時,他們上傳帖子的時間也會被上傳。
我想獲取上傳的日期和時間,並以適當的形式向用戶顯示。 例如,如果它是 2 小時前上傳的,它會說 2 小時而不是上傳的整個日期和時間或上傳日期的時間戳。 那么我如何展示它,哪個最簡單?
這段代碼:
Post post = dataSnapshot.getValue(Post.class);
dateAdded.setText(post.getDate_time());
我收到此錯誤:
java.lang.NullPointerException:嘗試在空對象引用上調用虛擬方法“java.lang.String com.example.gone.Model.Post.getDate_time()”
所以如果有人有辦法做到這一點,有人可以幫助我嗎? 謝謝
編輯 - -
我想顯示日期/時間的方法 -
private void getDate(TextView dateAdded) {
DatabaseReference reference = FirebaseDatabase.getInstance().getReference().child("Posts").child("date_time");
reference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
//dateAdded.setText((CharSequence) dataSnapshot.child("date_time"));
Post post = dataSnapshot.getValue(Post.class);
dateAdded.setText(post.getDate_time());
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
}
課后:
private String date_time;
public String getDate_time() {
return date_time;
}
public void setDate_time(String date_time) {
this.date_time = date_time;
}
public Post(String date_time) {
this.date_time = date_time;
}
JSON 節點:
"Posts" : {
"-MJ-VvX8zPdt2DY0pVqb" : {
"date_time" : "01-10-2020 22:17:43",
"description" : "",
"postid" : "-MJ-VvX8zPdt2DY0pVqb",
"postimage" : "https://firebasestorage.googleapis.com/v0/b/gone-b14f5.appspot.com/o/posts%2F1602031430356.null?alt=media&token=dc7c4a5c-d652-44be-bb2a-28283964da1e",
"publisher" : "gIt685Xex8eZaPBSsbcPbU1S5V93"
},
"-MJ-qP4mKkkXCTGQeqhq" : {
"date_time" : "06-10-2020 22:17:43",
"description" : "",
"postid" : "-MJ-qP4mKkkXCTGQeqhq",
"postimage" : "https://firebasestorage.googleapis.com/v0/b/gone-b14f5.appspot.com/o/posts%2F1602037062255.null?alt=media&token=5fde471b-f794-4376-8250-18c0893c716e",
"publisher" : "gIt685Xex8eZaPBSsbcPbU1S5V93"
},
"-MJUqKzwnZfC0cVRRohI" : {
"dateAdded" : "12-10-2020 22:45:41",
"date_time" : "1602557141467",
"description" : "",
"postid" : "-MJUqKzwnZfC0cVRRohI",
"postimage" : "https://firebasestorage.googleapis.com/v0/b/gone-b14f5.appspot.com/o/posts%2F1602557139321.null?alt=media&token=06af1115-481a-4c0f-8ba7-3bef13da3989",
"publisher" : "J51XZDETvNT86eCLtqU5XHUzEWu2"
}
}
date_time
不是Posts
直接子級。 而不是date_time
粘貼-MJ-VvX8zPdt2DY0pVqb
。
像這樣嘗試:
DatabaseReference reference = FirebaseDatabase
.getInstance()
.getReference()
.child("Posts")
.child("-MJ-VvX8zPdt2DY0pVqb");
更新:
要顯示您需要 RecyclerView 的所有帖子。
這是從 Firebase Quickstart復制的代碼。
Query postsQuery = FirebaseDatabase
.getInstance().getReference().child("Posts").limitToFirst(100);
FirebaseRecyclerOptions options = new FirebaseRecyclerOptions.Builder<Post>()
.setQuery(postsQuery, Post.class)
.build();
mAdapter = new FirebaseRecyclerAdapter<Post, PostViewHolder>(options) {
@Override
public PostViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
LayoutInflater inflater = LayoutInflater.from(viewGroup.getContext());
return new PostViewHolder(inflater.inflate(R.layout.item_post, viewGroup, false));
}
@Override
protected void onBindViewHolder(PostViewHolder viewHolder, int position, final Post model) {
// model.date
});
}
};
mRecycler.setAdapter(mAdapter);
更新 2:
顯示時間:
// if date_time is Long like: 1602557141467
val time = 1602557141467
// if date_time is String like: 01-10-2020 22:17:43
val time = SimpleDateFormat(
"dd-MM-yyyy HH:mm:ss",
Locale.getDefault()
).parse("01-10-2020 22:17:43")?.time ?: 0
val deltaTime = Date().time - time
val minutes = (deltaTime / (60 * 1000)).toInt() % 60
val hours = (deltaTime / ( 60 * 60 * 1000)).toInt() % 24
val days = (deltaTime / ( 24 * 60 * 60 * 1000)).toInt()
val result = buildString {
if (days != 0) append("${days}d ")
if (hours != 0) append("${hours}h ")
if (minutes != 0) append("${minutes}m")
}
我使用 Gson 在 build.gradle 中轉換我的數據:
dependencies {
implementation 'com.google.code.gson:gson:2.8.6'
}
在我的代碼中:
Gson gson = new Gson();
JsonElement jsonElement = gson.toJsonTree(dataSnapshot.getValue());
Post post = gson.fromJson(jsonElement, Post.class);
dateAdded.setText(post.getDate_time());
記住讓你的 Post 類 Serializable 在運行時有更好的結果
import java.io.Serializable;
public class Post implements Serializable{}
由於某種原因,直接使用 Firebase 失敗
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.