Я создал FragmentPagerAdapter в своем файле MainActivity.java, и определенный здесь менеджер фрагментов отображает ViewPager для 3 фрагментов - один из них - MapActivity.java. Я создал коллекцию в Firebase (Cloud Firestore) с именем «users» и добавил документы, соответствующие каждому идентификатору пользователя в Main Activity, используя FirebaseUserAuth.getCurrentUser (). Getuid (). Каждый документ имеет 4 поля, одно из которых является «Координаты». Во фрагменте MAp Activity я хочу обновить только поле «Координаты» только для документа этого пользователя. (это поле типа Geopoint).
Я попытался передать ссылку на документ соответствующего пользователя, установив аргументы пакета, как показано ниже, но это не сработало. Пожалуйста, помогите, любая подсказка / предложение будет оценено.
Мой основной раздел активности:
auth = FirebaseAuth.getInstance();
//final FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
authListener = new FirebaseAuth.AuthStateListener() {
@Override
public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
FirebaseUser user = firebaseAuth.getCurrentUser();
if (user != null) {
uid=auth.getUid();
FirebaseFirestore db = FirebaseFirestore.getInstance();
FirebaseFirestoreSettings settings = new FirebaseFirestoreSettings.Builder()
.setTimestampsInSnapshotsEnabled(true)
.build();
db.setFirestoreSettings(settings);
//initialising document with some sample data
Map<String, Object> users = new HashMap<>();
LatLng gp=new LatLng(22,88);
users.put("Coordinates", gp);
users.put("Crowd volume", 20);
users.put("Timestamp", FieldValue.serverTimestamp());
users.put("Userid", uid);
db.collection("Location Data")
.add(users)
.addOnSuccessListener(new OnSuccessListener<DocumentReference>() {
@Override
public void onSuccess(DocumentReference documentReference) {
Log.d(TAG, "DocumentSnapshot added with ID: " + documentReference.getId());
//Bundle args=new Bundle();
//args.putString("docref",documentReference.toString());
//frag.setArguments(args);
//this above part doesn't seem to work
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Log.w(TAG, "Error adding document", e);
}
});
startActivity(new Intent(MainActivity.this, LoginActivity.class));
finish();
}
}
};
В моей карте активности я сделал это:
FirebaseFirestore db = FirebaseFirestore.getInstance();
GeoPoint gp=new GeoPoint(lastLocation.getLatitude(), lastLocation.getLongitude());
//Bundle bundle=getArguments();---this didn't work
db.collection("Location Data").document("docref".getId()) //need help here, what do I write in place of docref?
.update(gp)
.addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
Log.d(TAG, "DocumentSnapshot successfully written!");
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Log.w(TAG, "Error writing document", e);
}
});