[英]How to put in Firebase in the LIKE_ID, POST_ID + USER_ID
我遇到了一個我自己無法解決的大問題,我需要在 Firebase 中輸入我的社交網絡應用程序的點贊,id 為 POSTID + USERID,但實際上,我不知道如何帶上 postid 並粘貼在喜歡 id(發布鍵)中。 主要問題是關於 post_key:它給了我一個隨機 id 而不是 post id 但老實說,我不知道如何帶它,所以結果是 LIKESID = RANDOMID + USERID,而不是 LIKESID = POSTID + USERID 我認為對於專家級程序員來說修復它非常簡單,但作為初學者,這讓我大吃一驚
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> {
ArrayList<Model> mList;
Context context;
public MyAdapter(Context context, ArrayList<Model> mList){
this.mList = mList;
this.context = context;
}
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View v = LayoutInflater.from(context).inflate(R.layout.item , parent , false);
return new MyViewHolder(v);
}
@Override
public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
Model model = mList.get(position);
holder.nickname.setText(model.getNickname());
holder.date.setText(model.getDate());
holder.time.setText(model.getTime());
holder.post.setText(model.getPost());
}
@Override
public int getItemCount() {
return mList.size();
}
public static class MyViewHolder extends RecyclerView.ViewHolder{
ImageButton like;
Boolean likechecker = false;
String currentUserID;
FirebaseAuth mAuth;
TextView date, time, nickname, post, liketextview;
DatabaseReference LikesRef;
DatabaseReference Database = FirebaseDatabase.getInstance().getReference();
final String post_key = Database.push().getKey();
Integer countlikes;
public MyViewHolder(@NonNull View itemView) {
super(itemView);
date = itemView.findViewById(R.id.date_text);
time = itemView.findViewById(R.id.time_text);
post = itemView.findViewById(R.id.post_text);
nickname = itemView.findViewById(R.id.nickname_text);
like = itemView.findViewById(R.id.like_btn);
mAuth = FirebaseAuth.getInstance();
currentUserID = mAuth.getCurrentUser().getUid();
LikesRef = (FirebaseDatabase.getInstance().getReference().child("Likes"));
setlikebuttonstatus(post_key);
like.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
likechecker = true;
LikesRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
if(likechecker.equals(true)){
if (snapshot.child(post_key).hasChild(currentUserID)){
LikesRef.child(post_key).child(currentUserID).removeValue();
likechecker = false;
}
else {
LikesRef.child(post_key).child(currentUserID).setValue(true);
likechecker = false;
}
}
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
}
});
}
public void setlikebuttonstatus(final String post_key) {
post = itemView.findViewById(R.id.post_text);
liketextview = itemView.findViewById(R.id.like_textview);
LikesRef = (FirebaseDatabase.getInstance().getReference().child("Likes"));
mAuth = FirebaseAuth.getInstance();
currentUserID = mAuth.getCurrentUser().getUid();
LikesRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
if(snapshot.child(post_key).hasChild(currentUserID)){
countlikes = (int) snapshot.child(post_key).getChildrenCount();
like.setImageResource(R.drawable.like);
liketextview.setText(Integer.toString(countlikes) + " Likes");}
else {
countlikes = (int) snapshot.child(post_key).getChildrenCount();
like.setImageResource(R.drawable.notlike);
liketextview.setText(Integer.toString(countlikes) + " Likes");
}
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
}
}
}
主頁.Activity
package com.example.scrapbase11;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import android.content.Intent;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.text.TextUtils;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.TextView;
import android.widget.Toast;
import com.firebase.ui.database.FirebaseRecyclerAdapter;
import com.firebase.ui.database.FirebaseRecyclerAdapter_LifecycleAdapter;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;
import com.google.firebase.storage.StorageReference;
import com.squareup.picasso.Picasso;
import java.awt.font.TextAttribute;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.EventListener;
import java.util.HashMap;
import java.util.List;
import de.hdodenhof.circleimageview.CircleImageView;
public class HomepageActivity extends AppCompatActivity {
String currentUserID;
private FirebaseAuth mAuth;
private DatabaseReference UsersRef, PostsRef, LikesRef;
private TextView nicknamedisplayed, displaynumblikes;
private EditText posttext;
private CircleImageView circleImageView;
private Button pubblicabtn;
private String saveCurrentdate, saveCurrenttime, tsaveCurrentdate, tsaveCurrenttime, postRandomName, nickname;
private RecyclerView recyclerView;
private FirebaseDatabase db = FirebaseDatabase.getInstance();
private DatabaseReference root = db.getReference().child("Posts");
private DatabaseReference Database = FirebaseDatabase.getInstance().getReference();
private MyAdapter adapter;
private ArrayList<Model> list;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_homepage);
displaynumblikes = (TextView) findViewById(R.id.like_textview);
nicknamedisplayed = (TextView) findViewById(R.id.nickname_textview);
posttext = (EditText) findViewById(R.id.postedittext);
pubblicabtn = (Button) findViewById(R.id.pubblica_btn);
circleImageView = (CircleImageView) findViewById(R.id.home_profileimage);
mAuth = FirebaseAuth.getInstance();
currentUserID = mAuth.getCurrentUser().getUid();
recyclerView = findViewById(R.id.recyclerView);
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
list = new ArrayList<>();
adapter = new MyAdapter(this, list);
recyclerView.setAdapter(adapter);
Calendar calFordDate = Calendar.getInstance();
Calendar calFordTime = Calendar.getInstance();
SimpleDateFormat currentDate = new SimpleDateFormat("dd/MM/yyyy");
saveCurrentdate = currentDate.format(calFordDate.getTime());
SimpleDateFormat currentTime = new SimpleDateFormat("HH:mm");
saveCurrenttime = currentTime.format(calFordTime.getTime());
final String post_key = Database.push().getKey();
circleImageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Sendtomyprofile();
}
});
nicknamedisplayed.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Sendtomyprofile();
}
});
root.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
for(DataSnapshot dataSnapshot : snapshot.getChildren()){
Model model = dataSnapshot.getValue(Model.class);
list.add(model);
}
adapter.notifyDataSetChanged();
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
UsersRef = (FirebaseDatabase.getInstance().getReference().child("Users"));
PostsRef = (FirebaseDatabase.getInstance().getReference().child("Posts"));
LikesRef = (FirebaseDatabase.getInstance().getReference().child("Likes"));
pubblicabtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Savepostmethod();
}
});
// codice per far visualizzare il proprio nickname
UsersRef.child(currentUserID).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
if(snapshot.exists()){
nickname = snapshot.child("nickname").getValue().toString();
nicknamedisplayed.setText("Welcome back " + nickname);
}
}
// fine del codice per visualizzare il proprio nickname
@Override
public void onCancelled(@NonNull DatabaseError error) {
Toast.makeText(HomepageActivity.this, "Database error :)", Toast.LENGTH_SHORT).show();
}
});
}
private void Sendtomyprofile() {
Intent Gotomyprofileintent =new Intent(HomepageActivity.this, ProfileActivity.class);
startActivity(Gotomyprofileintent);
}
private void Savepostmethod() {
String post = posttext.getText().toString();
if (TextUtils.isEmpty(post)) {
Toast.makeText(this, "Please write something...", Toast.LENGTH_SHORT).show();
} else {
Calendar tcalFordDate = Calendar.getInstance();
Calendar tcalFordTime = Calendar.getInstance();
SimpleDateFormat tcurrentDate = new SimpleDateFormat("ddMMyyyy");
tsaveCurrentdate = tcurrentDate.format(tcalFordDate.getTime());
SimpleDateFormat tcurrentTime = new SimpleDateFormat("HHmm");
tsaveCurrenttime = tcurrentTime.format(tcalFordTime.getTime());
postRandomName = tsaveCurrentdate + tsaveCurrenttime;
HashMap postMap = new HashMap();
postMap.put("userid", currentUserID);
postMap.put("nickname", nickname);
postMap.put("post", post);
postMap.put("time", saveCurrenttime);
postMap.put("date", saveCurrentdate);
PostsRef.child(currentUserID + postRandomName).updateChildren(postMap).addOnCompleteListener(new OnCompleteListener() {
@Override
public void onComplete(@NonNull Task task) {
if(task.isSuccessful()) {
Toast.makeText(HomepageActivity.this, "Pubblicazione riuscita", Toast.LENGTH_SHORT).show();
}
else
{
Toast.makeText(HomepageActivity.this, "Pubblicazione non riuscita, controlla la tua connessione internet", Toast.LENGTH_SHORT).show();
}
}
});
}
}}
問題很明顯。 您在這里創建:
final String post_key = Database.push().getKey();
總是一個隨機的 Uid。 並在這里使用它:
setlikebuttonstatus(post_key);
如問題中所述,您總是以 LIKESID = RANDOMID + USERID 結束。 您還編寫了解決方案:寫postUid
而不是隨機的。
這里的 model 給你的是什么? 它只是一個字符串嗎?:
holder.post.setText(model.getPost());
您能否與我們分享您如何獲得posts
列表,我們可以找到解決方案。 我們基本上只需要每個帖子快照中的key
而不是數據。 您可能擁有它,但它沒有映射到您的其他代碼來獲取它。
使用編輯中的代碼,您可以獲得這樣的post
uid,並可能添加到Model
class 屬性id
,然后像這樣添加它:
Model model = dataSnapshot.getValue(Model.class);
String key=dataSnapshot.getKey();
model.id=key;
list.add(model);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.