gpt4 book ai didi

java - ServerValue.TIMESTAMP 在 Firebase 中保存和检索时间戳

转载 作者:行者123 更新时间:2023-11-29 22:39:36 27 4
gpt4 key购买 nike

我的代码没有从 Firebase 返回 timestamp,我不知道为什么。此外,在 if else 语句的 private void setupWidgets 方法中 timestamp 显示为红色,我不知道为什么——我把** 在它旁边...有谁知道为什么我在上面声明了它?为什么我没有在 TextView 中获取 timestamp

我已将这两页用作引用 How to save the current date/time when I add new value to Firebase Realtime Database & Convert ServerValue.TIMESTAMP To date除了我看过的所有视频,但它仍然无法正常播放。


PostAdapter.java

public class ViewHolder extends RecyclerView.ViewHolder {

public ImageView image_profile, post_image, like, comment, attend_event, save_event, more_options;
public TextView username, number_of_likes, description, number_of_comments, text_event, text_location, text_date_time,
number_of_people_attending_event, timestamp;

public ViewHolder(@NonNull View itemView) {
super(itemView);

image_profile = itemView.findViewById(R.id.image_profile);
post_image = itemView.findViewById(R.id.post_image);
like = itemView.findViewById(R.id.like);
comment = itemView.findViewById(R.id.comment);
username = itemView.findViewById(R.id.username);
number_of_likes = itemView.findViewById(R.id.number_of_likes);
description = itemView.findViewById(R.id.description);
number_of_comments = itemView.findViewById(R.id.number_of_comments);
timestamp = itemView.findViewById(R.id.timestamp);

}
}

private void saveTimestamp() {
DatabaseReference reference = FirebaseDatabase.getInstance().getReference();
Map map = new HashMap();
map.put("timestamp", ServerValue.TIMESTAMP);
reference.child("Posts").updateChildren(map);
}

private void setupWidgets() {
String timestampDifference = getTimestampDifference();
if (!timestampDifference.equals("0")) {
**timestamp.setText(timestampDifference + " days ago");
} else {
**timestamp.setText("Today");
}
}

//Timestamp
private String getTimestampDifference() {
String difference = "";
Calendar calendar = Calendar.getInstance();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd-MMM-yyyy HH:mm:ss");
Date today = calendar.getTime();
simpleDateFormat.format(today);
Date timestamp;
final String dateTime = simpleDateFormat.format(calendar.getTime());
try {
timestamp = simpleDateFormat.parse(dateTime);
difference = String.valueOf(Math.round(((today.getTime() - timestamp.getTime()) / 1000 / 60 / 60 / 24)));
} catch (ParseException e) {
difference = "0";
}
return difference;

}

post_item.xml

<TextView
android:id="@+id/timestamp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/description"
android:layout_marginStart="10dp"
android:layout_marginBottom="10dp"
android:text="Have to add a Timestamp" />
PostAdapter.java

package com.e.events.Adapter;

public class PostAdapter extends RecyclerView.Adapter<PostAdapter.ViewHolder> {

public Context mContext;
public List<Post> mPost;

private FirebaseUser firebaseUser;

public PostAdapter(Context mContext, List<Post> mPost) {
this.mContext = mContext;
this.mPost = mPost;
}

@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(mContext).inflate(R.layout.post_item, parent, false);
return new PostAdapter.ViewHolder(view);
}

@Override
public void onBindViewHolder(@NonNull final ViewHolder holder, int position) {

firebaseUser = FirebaseAuth.getInstance().getCurrentUser();
final Post post = mPost.get(position);

Glide.with(mContext).load(post.getPostimage())
.apply(new RequestOptions().placeholder(R.drawable.placeholderimg))
.into(holder.post_image);

if ("".equals(post.getDescription())) {
holder.description.setVisibility(View.GONE);
} else {
holder.description.setVisibility(View.VISIBLE);
holder.description.setText(post.getDescription());
}

if ("".equals(post.getText_event())) {
holder.text_event.setVisibility(View.GONE);
} else {
holder.text_event.setVisibility(View.VISIBLE);
holder.text_event.setText(post.getText_event());
}

if ("".equals(post.getText_location())) {
holder.text_location.setVisibility(View.GONE);
} else {
holder.text_location.setVisibility(View.VISIBLE);
holder.text_location.setText(post.getText_location());
}

if ("".equals(post.getText_date_time())) {
holder.text_date_time.setVisibility(View.GONE);
} else {
holder.text_date_time.setVisibility(View.VISIBLE);
holder.text_date_time.setText(post.getText_date_time());
}
publisherInfo(holder.image_profile, holder.username, post.getPublisher());
eventLiked(post.getPostid(), holder.like);
number_of_likes(holder.number_of_likes, post.getPostid());

holder.like.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (holder.like.getTag().equals("like")) {
FirebaseDatabase.getInstance().getReference().child("Likes").child(post.getPostid())
.child(firebaseUser.getUid()).setValue(true);
addNotification(post.getPublisher(), post.getPostid());
} else {
FirebaseDatabase.getInstance().getReference().child("Likes").child(post.getPostid())
.child(firebaseUser.getUid()).removeValue();
}
}
});

publisherInfo(holder.image_profile, holder.username, post.getPublisher());
attending_event(post.getPostid(), holder.attend_event);
number_of_people_attending_event(holder.number_of_people_attending_event, post.getPostid());
getComments(post.getPostid(), holder.number_of_comments);
isSaved(post.getPostid(), holder.save_event);

holder.attend_event.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (holder.attend_event.getTag().equals("attend_event")) {
FirebaseDatabase.getInstance().getReference().child("Attending Event").child(firebaseUser.getUid())
.child(post.getPostid()).setValue(true);
} else {
FirebaseDatabase.getInstance().getReference().child("Attending Event").child(firebaseUser.getUid())
.child(post.getPostid()).removeValue();
}
}
});

holder.image_profile.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
SharedPreferences.Editor editor = mContext.getSharedPreferences("PREFS", Context.MODE_PRIVATE).edit();
editor.putString("profileid", post.getPublisher());
editor.apply();

((FragmentActivity) mContext).getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,
new ProfileFragment()).commit();
}
});

holder.username.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
SharedPreferences.Editor editor = mContext.getSharedPreferences("PREFS", Context.MODE_PRIVATE).edit();
editor.putString("profileid", post.getPublisher());
editor.apply();

((FragmentActivity) mContext).getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,
new ProfileFragment()).commit();
}
});

holder.post_image.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
SharedPreferences.Editor editor = mContext.getSharedPreferences("PREFS", Context.MODE_PRIVATE).edit();
editor.putString("postid", post.getPostid());
editor.apply();

((FragmentActivity) mContext).getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,
new PostDetailFragment()).commit();
}
});

holder.save_event.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (holder.save_event.getTag().equals("save")) {
FirebaseDatabase.getInstance().getReference().child("Saves").child(firebaseUser.getUid())
.child(post.getPostid()).setValue(true);
} else {
FirebaseDatabase.getInstance().getReference().child("Saves").child(firebaseUser.getUid())
.child(post.getPostid()).removeValue();
}
}
});

holder.attend_event.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (holder.attend_event.getTag().equals("attend event")) {
FirebaseDatabase.getInstance().getReference().child("Attending Event").child(post.getPostid())
.child(firebaseUser.getUid()).setValue(true);
} else {
FirebaseDatabase.getInstance().getReference().child("Attending Event").child(post.getPostid())
.child(firebaseUser.getUid()).removeValue();
}
}
});

holder.comment.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(mContext, CommentsActivity.class);
intent.putExtra("postid", post.getPostid());
intent.putExtra("publisherid", post.getPublisher());
mContext.startActivity(intent);
}
});

holder.number_of_comments.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(mContext, CommentsActivity.class);
intent.putExtra("postid", post.getPostid());
intent.putExtra("publisherid", post.getPublisher());
mContext.startActivity(intent);
}
});

holder.number_of_likes.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(mContext, FollowersActivity.class);
intent.putExtra("id", post.getPostid());
intent.putExtra("title", "likes");
mContext.startActivity(intent);
}
});

holder.more_options.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
PopupMenu popupMenu = new PopupMenu(mContext, v);
popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
switch (item.getItemId()) {
case R.id.edit_event:
editPost(post.getPostid());
return true;
case R.id.delete_event:
FirebaseDatabase.getInstance().getReference("Posts").child(post.getPostid()).removeValue()
.addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()) {
Toast.makeText(mContext, "Event deleted", Toast.LENGTH_SHORT).show();
}
}
});
return true;
case R.id.report_event:
Toast.makeText(mContext, "Event has been reported", Toast.LENGTH_SHORT).show();
return true;
default:
return false;
}
}
});
popupMenu.inflate(R.menu.event_menu);
if (!post.getPublisher().equals(firebaseUser.getUid())) {
popupMenu.getMenu().findItem(R.id.edit_event).setVisible(false);
popupMenu.getMenu().findItem(R.id.delete_event).setVisible(false);
}
popupMenu.show();
}
});

}

@Override
public int getItemCount() {
if (mPost != null) {
return mPost.size();
} else {
return 0;
}

}

public class ViewHolder extends RecyclerView.ViewHolder {

public ImageView image_profile, post_image, like, comment, attend_event, save_event, more_options;
public TextView username, number_of_likes, description, number_of_comments, text_event, text_location, text_date_time,
number_of_people_attending_event, timestamp;

public ViewHolder(@NonNull View itemView) {
super(itemView);

image_profile = itemView.findViewById(R.id.image_profile);
post_image = itemView.findViewById(R.id.post_image);
like = itemView.findViewById(R.id.like);
comment = itemView.findViewById(R.id.comment);
username = itemView.findViewById(R.id.username);
number_of_likes = itemView.findViewById(R.id.number_of_likes);
description = itemView.findViewById(R.id.description);
number_of_comments = itemView.findViewById(R.id.number_of_comments);
text_event = itemView.findViewById(R.id.text_event);
text_location = itemView.findViewById(R.id.text_location);
text_date_time = itemView.findViewById(R.id.text_date_time);
attend_event = itemView.findViewById(R.id.attend_event);
number_of_people_attending_event = itemView.findViewById(R.id.number_of_people_attending_event);
save_event = itemView.findViewById(R.id.save_event);
more_options = itemView.findViewById(R.id.more_options);
timestamp = itemView.findViewById(R.id.timestamp);

}
}

private void saveTimestamp() {
DatabaseReference reference = FirebaseDatabase.getInstance().getReference();
Map map = new HashMap();
map.put("timestamp", ServerValue.TIMESTAMP);
reference.child("Posts").updateChildren(map);
}

//Set words for the timestamp "Today" or "___ days ago"
private void setupWidgets() {
String timestampDifference = getTimestampDifference();
if (!timestampDifference.equals("0")) {
timestamp.setText(timestampDifference + " days ago");
} else {
timestamp.setText("Today");
}
}

//Timestamp
private String getTimestampDifference() {
Log.d(TAG, "getTimestampDifference: getting timestamp difference");

String difference = "";
Calendar calendar = Calendar.getInstance();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd-MMM-yyyy HH:mm:ss", Locale.US);
simpleDateFormat.setTimeZone(TimeZone.getTimeZone("America/Chicago"));
Date today = calendar.getTime();
simpleDateFormat.format(today);
Date timestamp;
final String dateTime = simpleDateFormat.format(calendar.getTime());
try {
timestamp = simpleDateFormat.parse(dateTime);
difference = String.valueOf(Math.round(((today.getTime() - timestamp.getTime()) / 1000 / 60 / 60 / 24)));
} catch (ParseException e) {
difference = "0";
}
return difference;

}

private void getComments(String postid, final TextView comments) {
DatabaseReference reference = FirebaseDatabase.getInstance().getReference().child("Comments").child(postid);

reference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
comments.setText(dataSnapshot.getChildrenCount() + "");
}

@Override
public void onCancelled(@NonNull DatabaseError databaseError) {

}
});
}

private void eventLiked(String postid, final ImageView imageView) {

final FirebaseUser firebaseUser = FirebaseAuth.getInstance().getCurrentUser();

DatabaseReference reference = FirebaseDatabase.getInstance().getReference().child("Likes").child(postid);

reference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
if (dataSnapshot.child(firebaseUser.getUid()).exists()) {
imageView.setImageResource(R.drawable.ic_event_liked_aqua_fill);
imageView.setTag("liked");
} else {
imageView.setImageResource(R.drawable.ic_favorite_heart_hollow);
imageView.setTag("like");
}
}

@Override
public void onCancelled(@NonNull DatabaseError databaseError) {

}
});
}

private void addNotification(final String userid, final String postid) {
DatabaseReference reference = FirebaseDatabase.getInstance().getReference("Notifications").child(userid);

HashMap<String, Object> hashMap = new HashMap<>();

hashMap.put("userid", firebaseUser.getUid());
hashMap.put("comment", "liked your Event");
hashMap.put("postid", postid);
hashMap.put("ispost", true);

reference.push().setValue(hashMap);
}

private void number_of_likes(final TextView likes, String postid) {
DatabaseReference reference = FirebaseDatabase.getInstance().getReference().child("Likes").child(postid);

reference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
likes.setText(dataSnapshot.getChildrenCount() + "");
}

@Override
public void onCancelled(@NonNull DatabaseError databaseError) {

}
});
}

private void attending_event(String postid, final ImageView imageView) {

final FirebaseUser firebaseUser = FirebaseAuth.getInstance().getCurrentUser();

DatabaseReference reference = FirebaseDatabase.getInstance().getReference().child("Attending Event").child(postid);

reference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
if (dataSnapshot.child(firebaseUser.getUid()).exists()) {
imageView.setImageResource(R.drawable.ic_person_attending_event_light_green);
imageView.setTag("attending event");
} else {
imageView.setImageResource(R.drawable.ic_person_plus_black_attend_event);
imageView.setTag("attend event");
}
}

@Override
public void onCancelled(@NonNull DatabaseError databaseError) {

}
});
}

private void number_of_people_attending_event(final TextView number_of_people, String postid) {
DatabaseReference reference = FirebaseDatabase.getInstance().getReference().child("Attending Event").child(postid);

reference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
number_of_people.setText(dataSnapshot.getChildrenCount() + "");
}

@Override
public void onCancelled(@NonNull DatabaseError databaseError) {

}
});
}

private void publisherInfo(final ImageView image_profile, final TextView username, String userid) {
DatabaseReference reference = FirebaseDatabase.getInstance().getReference("Users").child(userid);

reference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
User user = dataSnapshot.getValue(User.class);
Glide.with(mContext).load(user.getImageurl()).into(image_profile);
username.setText(user.getUsername());

}

@Override
public void onCancelled(@NonNull DatabaseError databaseError) {

}
});
}

private void isSaved(final String postid, final ImageView imageView) {
FirebaseUser firebaseUser = FirebaseAuth.getInstance().getCurrentUser();

DatabaseReference reference = FirebaseDatabase.getInstance().getReference().child("Saves").child(firebaseUser.getUid());
reference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
if (dataSnapshot.child(postid).exists()) {
imageView.setImageResource(R.drawable.ic_bookmark_darker_version);
imageView.setTag("saved");
} else {
imageView.setImageResource(R.drawable.ic_save_hollow);
imageView.setTag("save");
}
}

@Override
public void onCancelled(@NonNull DatabaseError databaseError) {

}
});
}

//Editing Event
private void editPost(final String postid) {
AlertDialog.Builder alertDialog = new AlertDialog.Builder(mContext);
alertDialog.setTitle("Edit Event");

final EditText editText = new EditText(mContext);
LinearLayout.LayoutParams linearLayoutParams = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT);

editText.setLayoutParams(linearLayoutParams);
alertDialog.setView(editText);

getText(postid, editText);

alertDialog.setPositiveButton("Edit",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {

HashMap<String, Object> hashMap = new HashMap<>();
hashMap.put("description", editText.getText().toString());

FirebaseDatabase.getInstance().getReference("Posts")
.child(postid).updateChildren(hashMap);
}
});
alertDialog.setNegativeButton("Cancel",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
alertDialog.show();
}

private void getText(String postid, final EditText editText) {
DatabaseReference reference = FirebaseDatabase.getInstance().getReference("Posts").child(postid);
reference.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
editText.setText(dataSnapshot.getValue(Post.class).getDescription());
}

@Override
public void onCancelled(@NonNull DatabaseError databaseError) {

}
});
}
}


[![screenshot_timestamp][1]][1]


[1]: /image/TZfI7.png


最佳答案

您收到该错误是因为您尝试使用在 setupWidgets() 方法中不可见的变量。您的 timestamp 变量在您的 ViewHolder 类中可见。那是它的范围。看,您只能在不能在类外使用的构造函数中使用该变量。要解决这个问题,您可以将这些方法移动到您的 ViewHolder 类中,或者在调用它们时将其作为参数传递。

关于java - ServerValue.TIMESTAMP 在 Firebase 中保存和检索时间戳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59161484/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com