Я хочу прочитать данные из firestore

#android #google-cloud-firestore

#Android #google-облако-firestore

Вопрос:

Я много пробовал, но мои данные не отображаются. когда я помещаю string вместо userId и NFID (userId и Nfid имеют одинаковое значение ….. но он не может читать.

 public class ClubInfoActivity extends AppCompatActivity {
    public static final String EXTRA_NFID= "com.hm.roktojoddha.EXTRA_NFID";
    public static final String EXTRA_MOBILE= "com.hm.roktojoddha.EXTRA_MOBILE";
    public static final String EXTRA_ID= "com.hm.roktojoddha.EXTRA_ID";
    public static final String EXTRA_CLUB= "com.hm.roktojoddha.EXTRA_CLUB";
    public static final String EXTRA_CLUB_FORM= "com.hm.roktojoddha.EXTRA_CLUB_FORM";
    FirebaseFirestore fstore;
    FirebaseAuth fAuth;
    String userID,nfid;
    TextView club,title,descrip,date,time,place;
    Button form,page;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_club_info);
        fAuth = FirebaseAuth.getInstance();
        Intent intent = getIntent();
        nfid=intent.getStringExtra(FeedFragment.EXTRA_NFID);

        userID=intent.getStringExtra(FeedFragment.EXTRA_ID);
        Toast.makeText(ClubInfoActivity.this, "" userID " " nfid, Toast.LENGTH_SHORT).show();
        fstore = FirebaseFirestore.getInstance();

        club = findViewById(R.id.text7club);
        title = findViewById(R.id.text11club);
        descrip = findViewById(R.id.text17club);
        date = findViewById(R.id.text98club);
        time = findViewById(R.id.text95club);
        place =findViewById(R.id.textView100club);
        form = findViewById(R.id.button11);
        page = findViewById(R.id.button12);

      final  String  UI = userID;
      final  String NI =nfid;

        Toast.makeText(ClubInfoActivity.this, "" UI " " NI, Toast.LENGTH_SHORT).show();

        DocumentReference documentReference = fstore.collection("Club_Detail").document(nfid).collection("History").document(nfid);
        documentReference.addSnapshotListener(this, new EventListener<DocumentSnapshot>() {
            @Override
            public void onEvent(@Nullable DocumentSnapshot documentSnapshot, @Nullable FirebaseFirestoreException e) {
                club.setText(documentSnapshot.getString("Club"));
                title.setText(documentSnapshot.getString("Title"));
                descrip.setText(documentSnapshot.getString("Description"));
                date.setText(documentSnapshot.getString("Date"));
                time.setText(documentSnapshot.getString("Time"));
                place.setText(documentSnapshot.getString("Places"));
                String url_check=documentSnapshot.getString("URL");

                if (isValid(url_check)){
                 Toast.makeText(ClubInfoActivity.this, "Yes, URL is Valid", Toast.LENGTH_LONG).show();

                    form.setVisibility(View.VISIBLE);
                }

                else{
                  Toast.makeText(ClubInfoActivity.this, "NO, URL is not Valid/All", Toast.LENGTH_LONG).show();
                    form.setVisibility(View.GONE);
                }

            }
        });
 

Я перехожу от новостей моей ленты к другому действию

Здесь данные не отображаются

Но когда я компилирую этот код

  DocumentReference documentReference = fstore.collection("Club_Detail").document("7").collection("History").document("202142200Vv1roiaUSQhttIRiyP60LxZd4Hk2");
        documentReference.addSnapshotListener(this, new EventListener<DocumentSnapshot>() {
            @Override
            public void onEvent(@Nullable DocumentSnapshot documentSnapshot, @Nullable FirebaseFirestoreException e) {
                club.setText(documentSnapshot.getString("Club"));
                title.setText(documentSnapshot.getString("Title"));
                descrip.setText(documentSnapshot.getString("Description"));
                date.setText(documentSnapshot.getString("Date"));
                time.setText(documentSnapshot.getString("Time"));
                place.setText(documentSnapshot.getString("Places"));
                String url_check=documentSnapshot.getString("URL");

                if (isValid(url_check)){
                 Toast.makeText(ClubInfoActivity.this, "Yes, URL is Valid", Toast.LENGTH_LONG).show();

                    form.setVisibility(View.VISIBLE);
                }

                else{
                  Toast.makeText(ClubInfoActivity.this, "NO, URL is not Valid/All", Toast.LENGTH_LONG).show();
                    form.setVisibility(View.GONE);
                }

            }
 

Это работает

Но я не хочу этого.

Комментарии:

1. извините …. я не это имел в виду

Ответ №1:

Похоже, проблема в том, что вы используете одну и ту же String переменную для имен документов. В вашем первом коде (о котором вы говорите, что он не работает) вы используете nfid String переменную в качестве имени документа для обоих документов.

 DocumentReference documentReference = fstore.collection("Club_Detail").document(nfid).collection("History").document(nfid);
 

Но в другом коде (который вы добавляете имена документов вручную) вы используете разные значения для каждого документа.

 DocumentReference documentReference = fstore.collection("Club_Detail").document("7").collection("History").document("202142200Vv1roiaUSQhttIRiyP60LxZd4Hk2");
 

Редактировать:

Всплывающее сообщение, показывающее неправильный порядок, я записываю его в соответствии с моей базой данных firestore, я создаю Club_Detail, затем userId, который равен 7 для одного пользователя, затем историю, затем nfid как serial и эту строку nfid

 DocumentReference documentReference = fstore.collection("Club_Detail").document(userID).collection("History").document(nfid);
 

Комментарии:

1. всплывающее сообщение, показывающее неправильный порядок, я записываю его в соответствии с моей базой данных firestore, я создаю Club_Detail, затем userId, который равен 7 для одного пользователя, затем историю, затем nfid как serial и эту строку nfid

2. Я хотел сказать, что вы используете неправильные названия документов. Вы показали две ссылки на DocumentReferences, и имена документов различаются даже для одного и того же документа. Вот что я хотел сказать. В соответствии с вашим комментарием отредактировал мой ответ и изменил названия документов.

3. первый, который вы видите, показан из другого действия, и последний, который вы видите, после открытия этого действия …… два разных

4. Несмотря на то, что действия разные, вы используете одну и ту же строковую переменную (nfid) для разных документов. Вы говорите, что коды принадлежат двум разным действиям, но база данных одинакова, поэтому в соответствии с вашими кодами коллекции и документы одинаковы или имеют схожую структуру, но для имен документов в первом действии вы передаете одну и ту же строковую переменную, но во втором действии имена документов совершенно разные. Либо ваше первое Действие имеет неправильные имена документов, либо ваше второе Действие имеет неправильные имена документов.

5. если(категория.равно(«Клуб»)) { Намерение намерение = новое намерение(getActivity(), ClubInfoActivity.class ); намерение.putExtra(EXTRA_NFID, n_fid); намерение.putExtra(EXTRA_ID, id); startActivity(намерение); Toast.makeText(getActivity(), «» id » » n_fid, Toast. LENGTH_SHORT).show(); }