Не удается получить данные из ссылки на документ - PullRequest
0 голосов
/ 17 мая 2018

enter image description here

Это мой фрагмент кода:

Я хочу получить баллы из документа NewDocument

import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;
import android.widget.Toast;

import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.OnFailureListener;
import com.google.android.gms.tasks.OnSuccessListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.firestore.DocumentReference;
import com.google.firebase.firestore.DocumentSnapshot;
import com.google.firebase.firestore.FirebaseFirestore;
import com.google.firebase.firestore.QuerySnapshot;

import java.util.HashMap;
import java.util.Map;

public class MainActivity extends AppCompatActivity {
String data;

FirebaseFirestore firebaseFirestore=FirebaseFirestore.getInstance();

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    //Adder("Hello");

        TextView txt=findViewById(R.id.textView);
        txt.setText(Gettingdata());

}

private String Gettingdata() {
    firebaseFirestore.collection("Users").document("NewDocument")
            .get()
            .addOnSuccessListener(new OnSuccessListener<DocumentSnapshot>() {
                @Override
                public void onSuccess(DocumentSnapshot documentSnapshot) {
                    if (documentSnapshot!=null) {
                        data = documentSnapshot.toString().getString("email");

                    } else {
                        data="else case";
                        Log.d("Tag           ", "else case");
                        // Toast.makeText(this, "Document Does Not exists", Toast.LENGTH_SHORT).show();
                    }
                }
            }).addOnFailureListener(new OnFailureListener() {
        @Override
        public void onFailure(@NonNull Exception e) {
            // Toast.makeText(, "", Toast.LENGTH_SHORT).show();
            // Log.d("Tag",e.toString());
            data="Failed";
        }
    });
    return data;
}
}

но возвращенные данные равны нулю

Пожалуйста, помогите мне решить эту проблему Мне также нужен пункт, который находится в числе в firestore. Я много пробовал, но возврат всегда нулевой

1 Ответ

0 голосов
/ 17 мая 2018

Вы можете использовать предложение Алекса Мамо или установить представление непосредственно в ответе:

TextView myTextView;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    //Adder("Hello");

      myTextView =findViewById(R.id.textView);
      Gettingdata();


}

private void Gettingdata() {
    firebaseFirestore.collection("Users").document("NewDocument")
            .get()
            .addOnSuccessListener(new OnSuccessListener<DocumentSnapshot>() {
                @Override
                public void onSuccess(DocumentSnapshot documentSnapshot) {
                    if (documentSnapshot!=null) {
                        data = documentSnapshot.toString().getString("email");
                    myTextView.setText(data);

                    } else {
                        data="else case";
                        Log.d("Tag           ", "else case");
                        // Toast.makeText(this, "Document Does Not exists", Toast.LENGTH_SHORT).show();
                    }
                }
            }).addOnFailureListener(new OnFailureListener() {
        @Override
        public void onFailure(@NonNull Exception e) {
            // Toast.makeText(, "", Toast.LENGTH_SHORT).show();
            // Log.d("Tag",e.toString());
            data="Failed";
        }
    });
}
}

Вызовы Firebase являются асинхронными, поэтому вы не можете вернуть данные в свой метод, потому что они не "поступили"" еще.Вы можете отреагировать на поступление внутри onResponse или создать структуру обратного вызова, как предложено Алексом (это более чистый и более организованный способ сделать это).

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