Как передать ссылку на документ пожарного хранилища для коллекции, созданной в MainActivity, на дочерний фрагмент - PullRequest
0 голосов
/ 03 ноября 2018

Я создал 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);
                    }
                });

1 Ответ

0 голосов
/ 30 июля 2019

Я передал идентификатор в виде строки, используя putExtraString() и getExtraString() в намерении.

Итак: В вашей основной деятельности:

Intent intent = new Intent(MainActivity.this, LoginActivity.class);
intent.putExtra("documentID",documentReference.getId())
startActivity(intent);

А у вас в логинеАктивность:

Вместо "docref".getId() просто используйте getIntent().getStringExtra("documentID").

Это не идеальное решение, вы можете подумать о том, чтобы хранить их в другом классе как статическую переменную Map (таким образом, вы буквально сохраняете объекты) или, возможно, хранить их в автономной базе данных, например room

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...