我正在创建一个社交应用,当有人上传帖子时,他们上传帖子的时间也会被上传。
我想得到上传的日期和时间,并以适当的形式向用户展示。例如,如果它是在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"
}
}
我使用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无法实现
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个输入框和一个按钮,按一下就可以完成上面的操作。代码如下: 我这样设置了消防基地:
问题内容: 我目前正在学习Firebase和iOS的知识,因此请耐心等待。我当前正在发布到我的表,如下所示: 我正在尝试检索插入新记录时创建的内容,但是无法检索它。我已经尝试过( 但是由于浏览网页而无法找到一个可靠的解决方案,所以这是一个随机的猜测 )。有任何想法吗? 问题答案: 注意 :-Althogh 是自以来的一项强大功能,但是当您想创建具有唯一键的节点时更喜欢将数据存储到其中。我之所以喜欢