无法从 Firebase 数据库中取消节点
Cannot cancel nodes from Firebase Database
我正在开发一个应用程序,但遇到了问题。我开始记录 GPS 位置,但数据开始太多了。所以我实现了一个按钮来取消“位置”下的任何东西(或“纬度”和“经度”下,对我来说是一样的)。问题是似乎没有任何东西被取消到数据库中。
我面临这个问题 2 天,我被卡住了。这是我的数据库:
这是我使用的代码:
public class GalleryFragment extends Fragment {
private GalleryViewModel galleryViewModel;
private FragmentGalleryBinding binding;
DatabaseReference mbase;
public View onCreateView(@NonNull LayoutInflater inflater,
ViewGroup container, Bundle savedInstanceState) {
galleryViewModel =
new ViewModelProvider(this).get(GalleryViewModel.class);
binding = FragmentGalleryBinding.inflate(inflater, container, false);
View root = binding.getRoot();
EditText ET = binding.EditProva;
Button btn = binding.buttonProva;
FirebaseDatabase database = FirebaseDatabase.getInstance();
mbase = FirebaseDatabase.getInstance().getReference();
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
DatabaseReference drTest = FirebaseDatabase.getInstance().getReference();
drTest.child("Location").addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
for(DataSnapshot dataSnapshot:snapshot.getChildren()){
dataSnapshot.getRef().setValue(null);
}
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
Log.w("Errore DB: ", error.getMessage());
}
});
}
});
galleryViewModel.getText().observe(getViewLifecycleOwner(), new Observer<String>() {
@Override
public void onChanged(@Nullable String s) {
//textView.setText(s);
}
});
return root;
}
@Override
public void onDestroyView() {
super.onDestroyView();
binding = null;
}
}
在此解决方案之前,我在 :
中使用了该代码
DatabaseReference latRef = database.getReference("Location/latitude");
latRef.removeValue();
DatabaseReference longRef = database.getReference("Location/longitude");
longRef.removeValue();
但这也行不通。我查看了其他答案,但没有任何帮助。
The problem is that nothing seems to be canceled into the database.
发生这种情况很可能是因为您正试图删除大量数据。如果要删除 Location
节点下存在的所有内容,则应考虑一次删除合理数量的项目。这可以在客户端完成,但您也可以在 Cloud Functions for Firebase 中编写一个函数来获得完全相同的结果。
我正在开发一个应用程序,但遇到了问题。我开始记录 GPS 位置,但数据开始太多了。所以我实现了一个按钮来取消“位置”下的任何东西(或“纬度”和“经度”下,对我来说是一样的)。问题是似乎没有任何东西被取消到数据库中。 我面临这个问题 2 天,我被卡住了。这是我的数据库:
这是我使用的代码:
public class GalleryFragment extends Fragment {
private GalleryViewModel galleryViewModel;
private FragmentGalleryBinding binding;
DatabaseReference mbase;
public View onCreateView(@NonNull LayoutInflater inflater,
ViewGroup container, Bundle savedInstanceState) {
galleryViewModel =
new ViewModelProvider(this).get(GalleryViewModel.class);
binding = FragmentGalleryBinding.inflate(inflater, container, false);
View root = binding.getRoot();
EditText ET = binding.EditProva;
Button btn = binding.buttonProva;
FirebaseDatabase database = FirebaseDatabase.getInstance();
mbase = FirebaseDatabase.getInstance().getReference();
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
DatabaseReference drTest = FirebaseDatabase.getInstance().getReference();
drTest.child("Location").addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
for(DataSnapshot dataSnapshot:snapshot.getChildren()){
dataSnapshot.getRef().setValue(null);
}
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
Log.w("Errore DB: ", error.getMessage());
}
});
}
});
galleryViewModel.getText().observe(getViewLifecycleOwner(), new Observer<String>() {
@Override
public void onChanged(@Nullable String s) {
//textView.setText(s);
}
});
return root;
}
@Override
public void onDestroyView() {
super.onDestroyView();
binding = null;
}
}
在此解决方案之前,我在 :
中使用了该代码 DatabaseReference latRef = database.getReference("Location/latitude");
latRef.removeValue();
DatabaseReference longRef = database.getReference("Location/longitude");
longRef.removeValue();
但这也行不通。我查看了其他答案,但没有任何帮助。
The problem is that nothing seems to be canceled into the database.
发生这种情况很可能是因为您正试图删除大量数据。如果要删除 Location
节点下存在的所有内容,则应考虑一次删除合理数量的项目。这可以在客户端完成,但您也可以在 Cloud Functions for Firebase 中编写一个函数来获得完全相同的结果。