Android 每次代码运行时都会创建Firestore云新文档
每当该位置从应用程序发送到Firestore cloud时,它每次都会创建一个新文档。我只希望更改发生在已更改的文档字段中 以下是我的代码:-Android 每次代码运行时都会创建Firestore云新文档,android,firebase,google-cloud-firestore,Android,Firebase,Google Cloud Firestore,每当该位置从应用程序发送到Firestore cloud时,它每次都会创建一个新文档。我只希望更改发生在已更改的文档字段中 以下是我的代码:- LocationManager locationManager; LocationListener locationListener; @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int
LocationManager locationManager;
LocationListener locationListener;
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if( grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED){
if(ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED)
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 60 , 0,locationListener);
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
locationListener = new LocationListener() {
@Override
public void onLocationChanged(Location location) {
Toast.makeText(MainActivity.this, location.toString(),Toast.LENGTH_LONG).show();
FirebaseFirestore db = FirebaseFirestore.getInstance();
db.collection("Location")
.add(location)
.addOnSuccessListener(new OnSuccessListener<DocumentReference>() {
@Override
public void onSuccess(DocumentReference documentReference) {
Log.d("Info", "DocumentSnapshot added with ID: " + documentReference.getId());
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Log.w("Info", "Error adding document", e);
}
}); ...
}
LocationManager LocationManager;
LocationListener LocationListener;
@凌驾
public void onRequestPermissionsResult(int-requestCode,@NonNull-String[]permissions,@NonNull-int[]grantResults){
super.onRequestPermissionsResult(请求代码、权限、授权结果);
if(grantResults.length>0&&grantResults[0]==PackageManager.PERMISSION\u已授予){
if(ContextCompat.checkSelfPermission(此,Manifest.permission.ACCESS\u FINE\u位置)==PackageManager.permission\u已授予)
locationManager.RequestLocationUpdate(locationManager.GPS_提供程序,60,0,locationListener);
}
}
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
locationManager=(locationManager)this.getSystemService(Context.LOCATION\u服务);
locationListener=新locationListener(){
@凌驾
已更改位置上的公共无效(位置){
Toast.makeText(MainActivity.this,location.toString(),Toast.LENGTH_LONG.show();
FirebaseFirestore db=FirebaseFirestore.getInstance();
db.收集(“地点”)
.添加(位置)
.addOnSuccessListener(新的OnSuccessListener(){
@凌驾
成功时公共无效(文档引用文档引用){
Log.d(“Info”,“DocumentSnapshot添加了ID:”+documentReference.getId());
}
})
.addOnFailureListener(新的OnFailureListener(){
@凌驾
public void onFailure(@NonNull异常e){
Log.w(“信息”,“添加文档时出错”,e);
}
}); ...
}
它正在创建一个新文档,因为您正在使用:
公共任务添加(对象pojo)
将指定POJO作为内容的新文档添加到此集合,并自动为其分配文档ID
您需要改为使用:
db.集合(“城市”).文档(“位置”)
.set(位置)
.addOnSuccessListener(新的OnSuccessListener(){
也请检查此项:
谢谢@Peter。如果我使用set,还有一个问题,我需要手动创建文档吗?您可以在代码中创建文档,无需在控制台中编写(如答案中所示)
db.collection("cities").document("Locations")
.set(location)
.addOnSuccessListener(new OnSuccessListener<Void>() {