【发布时间】:2017-08-20 20:56:44
【问题描述】:
我正在构建一个基于 firebase 数据库的实时聊天应用 所以我的问题是,每次应用程序调用 oncreat 方法时,我都会调用 displaychatmessages() 方法,问题是我的数据库中的所有消息都显示在我的列表视图上。 我的问题是,当数据库变大时,应用程序会面临一些问题吗?几个月或几年后??我的意思是它会在开始时处理大量数据
作为一种解决方案,我试图在本地存储旧消息并稍后加载它们,并且该应用程序将只加载新添加的子项?但如果这是个好主意,我不知道如何开始,有人可以帮助我吗?
我的旧 displayChatMessages 方法: 对新的有什么想法吗??
private void displayChatMessages() {
RecyclerView recycler = (RecyclerView)findViewById(R.id.myRv);
LinearLayoutManager layoutmang = new LinearLayoutManager(this);
layoutmang.setStackFromEnd(true);
recycler.setLayoutManager(layoutmang);
mAdapter = new FirebaseRecyclerAdapter<ChatMessage, RecyclerView.ViewHolder>(
ChatMessage.class, R.layout.activity_main, RecyclerView.ViewHolder.class, FirebaseDatabase.getInstance().getReference()) {
@Override
protected void populateViewHolder(final RecyclerView.ViewHolder viewHolder, final ChatMessage user,
final int position) {
int y=0;
ChatMessage user2;
if (position>1){
user2 = getItem(position - 1);
}else{
user2 = getItem(position );
}
ChatMessage ori2 = getItem(position );
if (user.getMessageUser().matches(FirebaseAuth.getInstance().getCurrentUser().getEmail())) {
if (user2.getMessageFULL()<ori2.getMessageFULL()){
y=1;
populateType1((HolderMe) viewHolder, user, 1);
}else{
populateType1((HolderMe) viewHolder, user, 0);
}
}else if (!user.getMessageUser().matches(FirebaseAuth.getInstance().getCurrentUser().getEmail())){
if (user2.getMessageFULL()<ori2.getMessageFULL()){
populateType2((HolderYou) viewHolder, user, 1,FirebaseAuth.getInstance().getCurrentUser().getEmail());
}else{
populateType2((HolderYou) viewHolder, user, 0,FirebaseAuth.getInstance().getCurrentUser().getEmail());
}
}
if(user.getMessageTime()< new Date().getTime()) {
HolderDate vh3 = (HolderDate) viewHolder;
populateType3(vh3, user, position);
}
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
Log.e("ViewT",viewType+"");
if (viewType == 1) {
View userType1 = LayoutInflater.from(parent.getContext())
.inflate(R.layout.layout_holder_me, parent, false);
return new HolderMe(userType1);
} else{
View userType2 = LayoutInflater.from(parent.getContext())
.inflate(R.layout.layout_holder_you, parent, false);
return new HolderYou(userType2);
}
}
@Override
public int getItemViewType(int position) {
ChatMessage user = getItem(position);
String s = FirebaseAuth.getInstance().getCurrentUser().getEmail();
if (s.equals(user.getMessageUser())) {
return 1;
} else {
return 2;
}
}
private void populateType1(HolderMe v, ChatMessage model, int position) {
v.getTimeView().setText(DateFormat.format("HH:mm",model.getMessageTime()));
if (position==1) {
v.getFullDateView().setText(DateFormat.format("dd-MM-yyyy", model.getMessageTime()));
v.getFullDateView().setVisibility(View.VISIBLE);
}
v.getTextv().setText(model.getMessageText());
}
private void populateType3(HolderDate vcv, ChatMessage model, int position) {
vcv.getDate().setText(DateFormat.format("dd-MM-yyyy",model.getMessageTime()));
}
private void toaa1( String text) {
Toast.makeText(ChatActivity.this,text,Toast.LENGTH_LONG).show();
}
private void populateType2(HolderYou vv, ChatMessage model, int position,String username) {
vv.getTimeView().setText(DateFormat.format("HH:mm",model.getMessageTime()));
if (position==1) {
vv.getFullDateView().setVisibility(View.VISIBLE);
vv.getFullDateView().setText(DateFormat.format("dd-MM-yyyy", model.getMessageTime()));
}
vv.getTextv().setText(model.getMessageText());
if (username.matches("test2@test2.com")) {
vv.getImageView().setBackgroundResource(R.drawable.userm);
} else {
vv.getImageView().setBackgroundResource(R.drawable.usera);
}
}
};
recycler.setAdapter(mAdapter);
}
【问题讨论】:
标签: java android sqlite firebase android-recyclerview