当前位置: 首页 > 知识库问答 >
问题:

如何从Firebase子Android中检索时间戳

范俊逸
2023-03-14

我正在创建一个社交应用,当有人上传帖子时,他们上传帖子的时间也会被上传。

我想得到上传的日期和时间,并以适当的形式向用户展示。例如,如果它是在2小时前上传的,它会显示2小时,而不是上传的整个日期和时间或上传日期的时间戳。那么我该如何展示它,哪一个最简单?

此代码:

Post post = dataSnapshot.getValue(Post.class);
dateAdded.setText(post.getDate_time());

我得到了这个错误:

java.lang.NullPointerExctive:尝试调用虚方法java.lang.Stringcom.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) {
        }
    });
}

Post.class:

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"
    }
  }

共有2个答案

甄佐
2023-03-14

我使用Gson在内部转换数据。格雷德尔:

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类可以序列化,以便在运行时获得更好的结果

import java.io.Serializable;
public class Post implements Serializable{}

由于某些原因,直接使用Firebase无法实现

巫马望
2023-03-14

date\u time不是Posts的直接子项。而不是date\u 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")
    }
 类似资料:
  • 我对Firebase和Android是新手。我已经在我的Firebase帐户中存储了用户身份验证详细信息(姓名、个人资料图像而不是电子邮件ID)。我想检索那些数据(如姓名等)到我的应用程序的其他部分。如何检索实时数据库子值?

  • 问题内容: 我正在法国学习,所以很难找到法语教程来解决我的问题。因此,我不得不问我的问题,希望有一个令人满意的解决方案。 我的问题是我在firebase上读取数据时遇到了麻烦,并且花了三天时间。 我有这样的结构: 我已经开始编写一些代码,可以恢复密钥,但是无法恢复这些值“ nom”,“ argent”等。 问题答案: John的替代方法是使用来获取每个属性:

  • 我如何从所有userid都未知的医院中检索所有的hospitalNames。

  • firebase数据库最近的更新似乎有一些变化。我的项目在firebase\u数据库:^7.0.0版本下运行良好,但在firebase数据库的更新版本中,我无法更新项目代码。 以下是v7的工作版本 firebase\u数据库^9.0.12上的同一代码出现错误。我收到的错误在`(DataSnapShot snap)async{…}上错误是 无法将参数类型“Future Function(DataSn

  • 我试图创建一个简单的程序,从用户的名字,手机号码和电子邮件地址,然后把数据在Firebase实时数据库。 有3个输入框和一个按钮,按一下就可以完成上面的操作。代码如下: 我这样设置了消防基地:

  • 我面临的问题是,在使用Gallery Intent从Gallery中选择图像时,虽然图像存储在Firebase存储中,但不显示在ImageView中。相反,占位符消失,什么也看不见。另外,我对Android和Firebase还不熟悉。 附上相同的截图。 上传前 上传后 以下是我的代码: