我在使用我的代码时苦苦挣扎。我搜索并尝试了很多方法。我的目标是删除Firebase为我的应用程序提供的上一个条目,firebase数据来自嵌入式设备。我想替换我的Android应用程序中的值。
Firebase工作正常,应用程序将显示firebase提供的新值,但不会删除上一个条目。
我还有很多工作要做,但想要在继续之前修复基础知识。
所以基本上OnChildChanged会显示新的firebase条目,我只想在Firebase中输入新值时从Android应用程序中删除上一个条目。
我已经调查了removeValue和setValue但没有用
public class MainActivity extends AppCompatActivity {
DatabaseReference fDatabase;
ListView listview;
ArrayList<String> list = new ArrayList<>();
ArrayAdapter <String> adapter;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listview = (ListView) findViewById(R.id.listview);
adapter = new ArrayAdapter<String>(this, android.R.layout.simple_dropdown_item_1line, list);
listview.setAdapter(adapter);
fDatabase = FirebaseDatabase.getInstance().getReference();
fDatabase.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
String value = dataSnapshot.getValue(String.class);
list.add(value);
adapter.notifyDataSetChanged();
}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String s) {
String value = dataSnapshot.getValue(String.class);
list.remove(value);
adapter.notifyDataSetChanged();
list.add(value);
adapter.notifyDataSetChanged();
}
@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {
}
@Override
public void onChildMoved(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
}
答案 0 :(得分:1)
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String s) {
String value = dataSnapshot.getValue(String.class);
list.remove(value);
adapter.notifyDataSetChanged();
list.add(value);
adapter.notifyDataSetChanged();
}
看起来当你指定value
它正在获取新条目时,所以当你调用list.remove
时它不会删除旧条目,因为它实际上是在尝试删除新条目的任何实例。 / p>
查看是否有任何方法可以将旧条目映射到新条目,以便列表知道要删除的内容,因为value
的内容在新旧条目之间有所不同。