【发布时间】:2021-04-29 17:04:51
【问题描述】:
我正在使用带有 Android Studio 的 Firebase 实时数据库。在 FirebaseRecyclerAdapter 中,我可以使用 getRef(position).getKey(),但我使用的是 RecyclerView.Adapter,我想要获取密钥。我想获取他/她正在与之交谈的用户的 uid。
我的适配器类:
public class MessageFragmentAdapter extends
RecyclerView.Adapter<MessageFragmentAdapter.MessageFragmentViewHolder> {
private List<Messages> postList;
private FirebaseAuth mAuth;
String currentUserid ;
DatabaseReference ChatsRef , UsersRef
public MessageFragmentAdapter(List<Messages> postList) {
this.postList = postList ;
}
@NonNull
@Override
public MessageFragmentViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View view =LayoutInflater.from(viewGroup.getContext())
.inflate(R.layout.message_list_model,viewGroup,false);
mAuth = FirebaseAuth.getInstance();
currentUserid = mAuth.getCurrentUser().getUid();
ChatsRef = FirebaseDatabase.getInstance().getReference().child("message").child(currentUserid);
UsersRef = FirebaseDatabase.getInstance().getReference().child("Users");
return new MessageFragmentViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull final MessageFragmentAdapter.MessageFragmentViewHolder messageFragmentViewHolder, int i) {
final Messages messages = postList.get(i);
**final String key = getRef(position).getKey();**
try {
UsersRef.child(**key**).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
if (dataSnapshot.hasChild("name")){
final String retName = dataSnapshot.child("name").getValue().toString();
messageFragmentViewHolder.userName.setText(retName);
}
消息片段类:
private final List<Messages> postList =new ArrayList<>();
LinearLayoutManager linearLayoutManager ;
MessageFragmentAdapter messageFragmentAdapter ;
RecyclerView chatlist;
DatabaseReference ChatsRef ;
FirebaseAuth mAuth ;
String currentUserID ;
mAuth = FirebaseAuth.getInstance();
currentUserID = mAuth.getCurrentUser().getUid();
ChatsRef = FirebaseDatabase.getInstance().getReference().child("message").child(currentUserID);
chatlist = messagefragment.findViewById(R.id.chats_list);
messageFragmentAdapter = new MessageFragmentAdapter(postList);
chatlist.setHasFixedSize(true);
linearLayoutManager = new LinearLayoutManager(getContext());
linearLayoutManager.setReverseLayout(true);
linearLayoutManager.setStackFromEnd(true);
chatlist.setLayoutManager(linearLayoutManager);
chatlist.setAdapter(messageFragmentAdapter);
public void getmesssages(){
ChatsRef.orderByChild("timestamp").limitToLast(currentpage *
total_ITEMS).addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
try {
Messages messages = dataSnapshot.getValue(Messages.class);
itemPos++;
if(itemPos == 1){
String messageKey = dataSnapshot.getKey();
mLastKey = messageKey;
mPrevKey = messageKey;
}
postList.add(messages);
messageFragmentAdapter.notifyDataSetChanged();
chatlist.smoothScrollToPosition(chatlist.getAdapter().getItemCount());
chatlist.scrollToPosition(postList.size() - 1);
chatlist.setVisibility(View.VISIBLE);
}catch (Exception e){
}
}
@Override
public void onChildChanged(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
}
@Override
public void onChildRemoved(@NonNull DataSnapshot dataSnapshot) {
}
@Override
public void onChildMoved(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
消息类:
public class Messages {
public String data , time ,type , message , from ;
public Messages(){
}
public Messages(String data, String time, String type, String message, String from) {
this.data = data;
this.time = time;
this.type = type;
this.message = message;
this.from = from;
}
public String getData() {
return data;
}
public void setData(String data) {
this.data = data;
}
public String getTime() {
return time;
}
public void setTime(String time) {
this.time = time;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public String getFrom() {
return from;
}
public void setFrom(String from) {
this.from = from;
}
我有这个数据库:
message: {
CurrentUser uıd: {
Uid of the person he/she is talking to:(I want this key) {
random key: {
-date
-from
-message
-time
-type
}
random key: {
}
}
timestamp:
}
【问题讨论】:
-
“不工作”很难解决。在您标记的
final String key = getRef(position).getKey()行之后key的值是多少?你期望它是什么? -
@FrankvanPuffelen 它给出了一个错误。 “无法解析方法'getRef(int)'”。我想获取他/她正在发短信的用户的 uid
-
哦,是的,我现在看到您没有使用 FirebaseUI。
getRef()方法特定于 FirebaseUI 中的适配器,除非您自己添加,否则其他适配器上不可用。跨度>
标签: android firebase firebase-realtime-database android-recyclerview