gpt4 book ai didi

java - 如何退出 setValue Firebase 数据库?

转载 作者:行者123 更新时间:2023-12-02 10:39:55 25 4
gpt4 key购买 nike

我有一个用于从数据库条目更改messageText的代码:

@Override
public boolean onContextItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.edit:
AdapterView.AdapterContextMenuInfo tm = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
int position = tm.position;
final DatabaseReference ref = adapter.getRef(position);
ref.child("messageUserId").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
if (FirebaseAuth.getInstance().getCurrentUser().getUid().equals(dataSnapshot.getValue().toString())) {
ref.child("messageText").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
input.setText(dataSnapshot.getValue().toString());
sendMessage.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ref.child("messageText").setValue(input.getText().toString());
input.getText().clear();

Toast.makeText(Chat.this, "Изменено", Toast.LENGTH_SHORT).show();
}
});
}

@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
}

@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
break;
}
return false;
}

代码 ref.child("messageText").setValue(input.getText().toString()) 工作得很好,但在它之后代码再次启动

public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
input.setText(dataSnapshot.getValue().toString());

一切都在循环 - 来自 messageText 的数据被插入到 EditText input 中,我可以再次更改文本。

如何在第一次更改 messageText 后停止执行代码?

最佳答案

ValueEventListener 的 onDataChange()方法:

This method will be called with a snapshot of the data at this location. It will also be called each time that data changes.

也就是说,即使是写入、更新甚至删除操作,都会触发该方法。这也发生在您的情况下,您使用相同的引用 ref.child("messageText") 来添加数据并监听更改,这就是您出现此行为的原因。这种情况一再发生。为了解决这个问题,您需要通过创建两个不同的事件来更改代码的逻辑。 onClick 将数据写入数据库并附加监听器,使其无法与该事件相关。

关于java - 如何退出 setValue Firebase 数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52990740/

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