我创建了这个incrementLike
方法,它增加了我数据库中的整数。不幸的是,我无法弄清楚如何阻止用户每次点击“喜欢”图像时不断递增该值。
我认为likeAlready = true
语句无法访问,因为它似乎总是false
。我的逻辑/实现有什么问题?
private void incrementLike(int position) {
ParseQuery<ParseObject> query = new ParseQuery<>("Comment");
query.whereEqualTo(ParseConstants.KEY_OBJECT_ID, getItem(position).getObjectId());
query.findInBackground((comment, e) -> {
if (e == null) {
// Iterate over all messages and delete them
for (ParseObject commentObject : comment)
{
boolean likedAlready = false;
if (likedAlready == false) {
commentObject.increment("likeCount");
commentObject.saveInBackground();
Toast.makeText(getContext(), "Post liked", Toast.LENGTH_SHORT).show();
likedAlready = true;
} else {
Toast.makeText(getContext(), "You already liked this post", Toast.LENGTH_SHORT).show();
}
}
} else {
Log.e("Error", e.getMessage());
}
});
}
更新
我创建了一个名为“Like”的新类表,其中包含两个指针列,即senderId,其中User的objectId和commentObjectId是相关的Comment的objectId。
当按下“喜欢”图像时,我使用senderId和commentObjectId在“Like”表中创建一个新对象。最后一步是确定是否已为该特定Comment对象发送senderId。这就是我到目前为止所做的:
private void incrementLike(int position) {
ParseQuery<ParseObject> query = new ParseQuery<>(ParseConstants.CLASS_COMMENT);
query.whereEqualTo(ParseConstants.KEY_OBJECT_ID, getItem(position).getObjectId());
query.findInBackground((comment, e) -> {
if (e == null) {
// Iterate over all messages
for (ParseObject commentObject : comment)
{
ParseObject newLike = new ParseObject(ParseConstants.CLASS_LIKE);
newLike.put(ParseConstants.KEY_SENDER_ID, ParseUser.getCurrentUser());
newLike.put(ParseConstants.KEY_COMMENT_OBJECT_ID, commentObject);
newLike.saveInBackground();
Toast.makeText(getContext(), "Yeet liked", Toast.LENGTH_SHORT).show();
ParseQuery<ParseObject> query2 = new ParseQuery<>(ParseConstants.CLASS_LIKE);
query2.whereEqualTo(ParseConstants.KEY_COMMENT_OBJECT_ID, commentObject.getObjectId());
query2.findInBackground((comment2, e2) -> {
if (e2 == null) {
// I now have a list of Like objects with the commentObjectId associated with this Comment
// Only increment if the User objectId of the current ParseUser does not exist in this list
commentObject.increment("likeCount");
commentObject.saveInBackground();
/*this.adapter.addAll(mYeets);*/
notifyDataSetChanged();
} else {
Log.e("Error", e2.getMessage());
}
});
}
} else {
Log.e("Error", e.getMessage());
}
});
}
我在最后一步思考时遇到了麻烦。有什么建议吗?
答案 0 :(得分:2)
不幸的是,我无法弄清楚如何阻止用户每次点击&#34;喜欢&#34;时不断增加该值。图像。
当前代码中的简单布尔逻辑实际上是不可行的,因为除了递增db存储计数器之外,还必须存储谁(即用户id)递增它的信息(也在DB中)。您可以提前检查并显示&#34;喜欢&#34;仅当此类用户尚未执行此操作时按钮。
答案 1 :(得分:1)
问题是每次运行incrementLike()方法时,它首先将布尔值初始化为false。所以它的解决方案之一就是将你的布尔值初始化为全局变量。但是这个解决方案的问题是,每次用户运行app时,boolean的值都将丢失。因此,如果您想永久存储它,您必须将它存储在您的数据库中,关于谁喜欢,然后您可以从数据库中检索已经或不存在的人。
答案 2 :(得分:1)
你应该存储“喜欢”它的人(就像谁点击了图标一样)。您可以使用循环来检查诸如Dictionary之类的内容,其中您已将用户的名称保存为键值对。另一个可能有用的参考是Shared Preferences。