gpt4 book ai didi

java - 方法执行多次而不是一次

转载 作者:搜寻专家 更新时间:2023-10-30 23:28:10 25 4
gpt4 key购买 nike

Query ref = mDatabaseReference.child("Messages")
.child(MessageRecieverId).child(MessageSenderId).orderByChild("Seen").equalTo(false);
ref.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
long count = 0;
for(DataSnapshot ds : dataSnapshot.getChildren()) {
count = dataSnapshot.getChildrenCount();

MainData helper = new MainData(getApplicationContext()); //Change the name to your Helper Class name
SQLiteDatabase db = helper.getWritableDatabase();
String newId = "MyData";
Cursor data = helper.getData();
long newDatar = 0;
long newDatat = 0;
while(data.moveToNext()){
newId = data.getString(data.getColumnIndex("Data"));
newDatar = data.getInt(data.getColumnIndex("TotalMessagesRecieved"));
newDatat = data.getInt(data.getColumnIndex("TotalMessages"));
}
ContentValues contentValues = new ContentValues();
contentValues.put(KEY_DATA, newId);
contentValues.put(KEY_TOTAL_MESSAGES_RECIEVED, (newDatar+count));
contentValues.put(KEY_TOTAL_MESSAGES, (newDatat+count));//Change the value of newData(which is actually your old value) by incrementing
long returnVariable = db.update(TABLE_MAIN_DATA, contentValues, null, null);

if(returnVariable == -1){
Toast.makeText(getApplication(),"Nope", Toast.LENGTH_LONG).show();
//-1 means there was an error updating the values
}
else{
Toast.makeText(getApplication(),"r", Toast.LENGTH_SHORT).show();
}
}
Log.d("CMONNN", String.valueOf(count)); //Will print the number of seen messages
}

@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
Log.d("CMONNN", databaseError.getMessage()); //Don't ignore errors!
}
});

这个问题是我第一次打开 Activity ,如果有一个 child 要添加到 sqlite 中的表中,它通常会毫无问题地添加,然后我关闭 Activity 并再次打开它并添加 child 两次,即使只有一个,如果我关闭并再次打开它,它会增加三次而不是一次,然后它就会继续......那么为什么这是行为,我如何才能像第一次那样将它更改为只执行一次打开 Activity ...而且我无法使用 valueforsingleevent,因为当我每秒都在 Activity 中时我需要听听者...并且 removelistener 在关闭 Activity 时也没有工作...所以有人请帮帮我

最佳答案

很可能您从未在 Activity 结束时移除监听器。您使用 ref.addValueEventListener() 添加一个监听器, 但永远不要用 ref.removeEventListener() 删除它.如果您从不删除监听器,它将继续触发新的更改。在 Android 上,您通常使这些调用对称,因此如果您在 onStart 期间添加监听器,您将在 onStop 期间将其删除。

关于java - 方法执行多次而不是一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53418007/

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