簡體   English   中英

如何從 Firebase 子 Android 檢索時間戳

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM