gpt4 book ai didi

android - 如何为不同的用户设置不同的 Android Firebase 书签内容?

转载 作者:太空狗 更新时间:2023-10-29 13:47:56 25 4
gpt4 key购买 nike

我有一个 Application在我 3 天前上传的 Play 商店中。我正在为我的应用程序使用 Firebase 数据库。它基于单词,成语短语,介词,短语动词,对于各种考试很重要。每个单词都有一个书签选项。一切都很好。超过 30 人安装了我的应用程序。但不幸的是,我在这方面犯了一个大错误。现在的问题是,当一个用户为列表中的任何单词添加书签时,它会在已添加书签的部分为所有用户显示。当一个用户从书签中删除任何单词时,应用程序会为所有人删除该单词。我没有使用任何登录选项。请帮助我如何为不同的用户设置不同的书签选项?这是我的书签代码。

    @Override
protected void onStart() {
super.onStart();
FirebaseRecyclerAdapter<Blog,Idioms.BlogViewHolder>firebaseRecyclerAdapter=new FirebaseRecyclerAdapter<Blog, Idioms.BlogViewHolder>
(Blog.class,R.layout.bank_row,Idioms.BlogViewHolder.class,mUserDatabase) {
@Override
protected void populateViewHolder(Idioms.BlogViewHolder viewHolder, final Blog model, int position) {

final String fav_key=getRef(position).getKey();
viewHolder.setDetails(getApplicationContext(), model.getTitle(), model.getDescription(), model.getExample());
viewHolder.setFavourite(fav_key);

viewHolder.favourite.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
mfavourite=true;
databasefavourite.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {

if(mfavourite){

if (dataSnapshot.child(fav_key).hasChild("Title")){
databasefavourite.child(fav_key).child("Title").removeValue();
mfavourite = false;
}else {
databasefavourite.child(fav_key).child("Title").setValue(model.getTitle());
mfavourite = false;
}
if (dataSnapshot.child(fav_key).hasChild("Description")){
databasefavourite.child(fav_key).child("Description").removeValue();
mfavourite = false;
}else {
databasefavourite.child(fav_key).child("Description").setValue(model.getDescription());
mfavourite = false;
}
if (dataSnapshot.child(fav_key).hasChild("Example")){
databasefavourite.child(fav_key).child("Example").removeValue();
mfavourite = false;
}else {
databasefavourite.child(fav_key).child("Example").setValue(model.getExample());
mfavourite = false;
}
}

}

@Override
public void onCancelled(DatabaseError databaseError) {

}
});
}
});

}
};
mResultList.setAdapter(firebaseRecyclerAdapter);
}

最佳答案

最好的方法是提供身份验证,但在我的回答中,我假设您不能或不想这样做。

要让您的应用正常运行,请利用每次随机生成且唯一的 firebase 推送 key 。当用户第一次收藏时,生成一个推送 key 并将其保存在共享首选项中,现在每个收藏夹都将与推送 key 一起存储在数据库中。目前,每个用户都在调用相同的引用,并且使用按键更改它是唯一的方法。现有用户将继续面临问题,因为问题出在 android 代码中。

顺便说一句,你的应用很酷

代码。您最喜欢的操作将更改为:

//check if user has liked
SharedPreferences local = getSharedPreferences("favorite", MODE.PRIVATE);
String link = local.getString("link", null);
if(link != null){
databasefavourite = databasefavourite.child(link);
}else{
link = databasefavourite.push().getKey();
local.edit().putString("link", link).apply();
databasefavourite = databasefavourite.child(link);
}
//now continue with your code here
databasefavourite.addListenerForSingleValueEvent(...);

请注意,您应该使用单个监听器,因为每次都会触发值事件监听器

关于android - 如何为不同的用户设置不同的 Android Firebase 书签内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51340519/

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