我想补充一点
"chat" : {
"-Ksbjn0yCEB6EXhNNCM5" : {
"author" : "Ali Alacan",
"content" : "dummy content",
"date" : "Mon Aug 28 10:29:50 GMT+03:00 2017",
"id" : "H6huNPUggjtugjsERPCRSAp1"
},
"-KsbjpUtjp0oeipjjxMI" : {
"author" : "Ali Alacan",
"content" : "dummy content",
"date" : "Mon Aug 28 10:30:00 GMT+03:00 2017",
"id" : "H6huNPUggjtugjsERPCRSAp1"
}
我正在添加新的消息,下面的代码是我从Firebase文档中学到的。
@Exclude
public Map<String, Object> toMap(MessageModel messageModel) {
HashMap<String, Object> result = new HashMap<>();
result.put("id", messageModel.getId());
result.put("author", messageModel.getAuthor());
result.put("content", messageModel.getContent());
result.put("date", messageModel.getDate());
return result;
}
private void sendMessage() {
if (!TextUtils.isEmpty(etMessage.getText())) {
Date currentTime = Calendar.getInstance().getTime();
String key = firebaseDatabase.push().getKey();
MessageModel message = new MessageModel(UserData.getInstance().getUserId(), UserData.getInstance().getName(), "dummy content", currentTime.toString());
Map<String, Object> messageValues = toMap(message);
Map<String, Object> childUpdates = new HashMap<>();
childUpdates.put("/chat/" + key, messageValues);
childUpdates.put("/user-chat/" + UserData.getInstance().getUserId() + "/" + key, messageValues);
firebaseDatabase.updateChildren(childUpdates);
} else {
Snackbar snackbar = Snackbar
.make(getActivity().findViewById(R.id.dashboard_container), "Enter a message please ! " + UserData.getInstance().getName(), Snackbar.LENGTH_LONG);
snackbar.show();
}
}
我的模型是:
public class MessageModel {
String id;
String author;
String content;
String date;
public String getDate() {
return date;
}
public void setDate(String date) {
this.date = date;
}
public MessageModel(String id, String author, String content, String date) {
this.id = id;
this.author = author;
this.content = content;
this.date = date;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public MessageModel() {
}
}
和firebase侦听器
firebaseDatabase.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
getNewMessage(dataSnapshot);
}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String s) {
// getNewMessage(dataSnapshot);
}
@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {
// taskDeletion(dataSnapshot);
}
@Override
public void onChildMoved(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
RecyclerView适配器:
public class MyMessageRecyclerViewAdapter extends RecyclerView.Adapter<MyMessageRecyclerViewAdapter.ViewHolder> {
private final List<MessageModel> mValues;
private final OnListFragmentInteractionListener mListener;
public MyMessageRecyclerViewAdapter(List<MessageModel> items, OnListFragmentInteractionListener listener) {
mValues = items;
mListener = listener;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.item_chat, parent, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(final ViewHolder holder, int position) {
holder.mItem = mValues.get(position);
holder.mIdView.setText(mValues.get(position).getId());
holder.mContentView.setText(mValues.get(position).getContent());
holder.mAuthor.setText(mValues.get(position).getAuthor());
holder.mDate.setText(mValues.get(position).getDate());
holder.mView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (null != mListener) {
// Notify the active callbacks interface (the activity, if the
// fragment is attached to one) that an item has been selected.
mListener.onListFragmentInteraction(holder.mItem);
}
}
});
}
@Override
public int getItemCount() {
return mValues.size();
}
public class ViewHolder extends RecyclerView.ViewHolder {
public final View mView;
public final TextView mIdView;
public final TextView mContentView;
TextView mAuthor;
TextView mDate;
public MessageModel mItem;
public ViewHolder(View view) {
super(view);
mView = view;
mIdView = (TextView) view.findViewById(R.id.id);
mContentView = (TextView) view.findViewById(R.id.content);
mAuthor = (TextView) view.findViewById(R.id.author);
mDate = (TextView) view.findViewById(R.id.date);
}
@Override
public String toString() {
return super.toString() + " '" + mContentView.getText() + "'";
}
}
很抱歉读了这么长的帖子,谢谢你抽出时间。
你不需要再使用你的toMap了,因为你已经有了一个POJO,这会让你更加困惑你在做什么。
在你的活动中列一个清单。
ArrayList<MessageModel> myListModel = new ArrayList<MessageModel>();
在firebase侦听器上执行此操作。列出你的活动清单
这是儿童添加。
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
MessageModel tempMessage = dataSnapshot.getValue(MessageModel.class);
myListModel.add(tempRace);
}
现在您有了一个列表模型。通过使用Firebase提供的OnChildaFeed。使用此选项提供适配器型号并应用它。
重要的壁炉。在Fire base的每个查询中,如果您需要在完成其他操作后执行某些操作(例如:“onChildAdded”),您需要在您的情况下向THE SAME数据库参考添加另一个侦听器。我不知道,你没有包括你的活动,甚至你的数据库参考,所以我会提供一个。
DatabaseReference myReference = firebaseDatabase.getReferane("chat");
myReference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
MyMessageRecyclerAdapter myMessageAdapter= new MyMessageRecyclerAdapter(myListModel, listener);
//now you have to apply this to the RecyclerView.
yourWhateverNameofTheRecyclerview.SetAdapter(myMessageAdater);
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
因此,我尝试使用Recolyer视图和cursoradapter实现我的数据库,但我得到了错误。我不能很好地理解它们,所以我不知道是我没有正确地实现适配器,还是它是其他的东西。以下是java文件: mainactivity.java: 以下是回收器视图适配器: 最后是我得到的错误:
问题内容: 写入SSL套接字时出现以下异常 似乎目标服务器的证书不受信任。我在Windows 7机器jdk7和tomcat7上测试了我的实现,没有问题。在带有openJDK 6和tomcat7的ubuntu 10 LTS上引发了异常。我得到了套接字目标服务器的sha1和md5指纹。我要流式传输的服务器的证书不是我的ubuntu服务器上的受托人吗?我可以将指纹保存到tomcats密钥库中吗?如果是这
我们的应用程序成功地使用了此证书,并且在此过程中没有抛出任何错误。
我正在尝试在我的 上实现 ,但我没有得到任何结果。 我遵循了这个教程和这个技巧,但是没有人为我工作。 我已经实现了: 但它不让我编译,因为它们是不同的< code > viewmoder ,因为我创建了两个< code > viewmoder 类,但它们< code >扩展了Recycler。ViewHolder所以我不明白... 我正在尝试这样做,因为我有一个,我希望当列表为空时,它会显示一个,
问题内容: 我正在编写NIO服务器,并希望根据用户请求进行响应,即将一些数据写入通道。 读取一些数据后,我想响应。这意味着我需要添加到键,然后将键添加到“ 选定键”集中 ,然后一旦键出现在选定集中,就将一些内容写入通道。 如何将密钥显式添加到所选集中? 问题答案: 你不能 从Javadoc: 键可能无法直接添加到所选键集中。 您只能从中删除密钥。 但是您不需要任何这些。如果要写,只需写,且 仅当
当我按下后退按钮时,这个ShoppingActivity会被破坏,当我再次访问该activity时,我发现我的回收器视图项目被替换了两次。我该如何解决这个问题? ShoppingActivity.java这里编写的所有代码和volley类也在这里调用,当我按下后退键并再次访问该活动时,我发现我的回收器视图项被替换了 @override protected void onCreate(Bundle