我正在嘗試檢索函式中生成的陣列串列recuperarPessoasModelo(),但它的運行時間比我需要的要晚得多,因此傳遞給的revelaPessoas()值為 null,有沒有人知道我可以運行此函式并在recuperarPessoasModelo()執行后獲取值的任何方法?我不能把它放在里面,因為它有一個 for 回圈,它會運行 X 次并生成一個重復串列
資料庫中的 .Json 如下所示:
Perfil{
PcCPoh01wscJj7jJBQQorme7Rqq1{
status:online
name: Carl Johnson
age: 21
sex: male}
t3IeEKy7XxdGeLYRxw2G1djNHdp2{
status:online
name: John Marston
age: 33
sex: male}
}
Requisicoes{
t3IeEKy7XxdGeLYRxw2G1djNHdp2{
Enviadas{
PcCPoh01wscJj7jJBQQorme7Rqq1{
idPessoa:PcCPoh01wscJj7jJBQQorme7Rqq1
status: Aguardando
}
}
}
}
有問題的班級:
public class Perfil_outter extends AppCompatActivity{
private List <RequisicoesCitty> requisicao = new ArrayList<>();
private List <ModeloPerfil> pessoaQuestao = new ArrayList<>();
private String idComp;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
carregarIds();
revelaPessoa()
}
public List<ModeloPerfil> getPessoaQuestao() {
return pessoaQuestao;
}
public void setPessoaQuestao(List<ModeloPerfil> pessoaQuestao) {
this.pessoaQuestao = pessoaQuestao;
}
public void carregarIds(){
Log.d("Part 1", "Working");
DatabaseReference firebaseRef = ConfiguracaoFirebase.getFirebaseDatabase();
DatabaseReference idsRef = firebaseRef.child("Requisicoes");
Query refId = idsRef.child(usuarioAtual.getId()).child("Enviadas").orderByChild("id");
refId.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
for(DataSnapshot ds: snapshot.getChildren()) {
RequisicoesCitty reqSnapshots = ds.getValue(RequisicoesCitty.class);
Log.d("IdPessoas",reqSnapshots.getIdPessoa());
requisicao.add(reqSnapshots);
}
carregarRequisicoes();
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
}
public void carregarRequisicoes(){
if(requisicao.isEmpty()){
Log.d("N?o encontrado", "Nenhuma requisi??o Citty");
}
for(RequisicoesCitty requisicao: requisicao) {
Log.d("Part 2", "Working");
DatabaseReference firebaseRef = ConfiguracaoFirebase.getFirebaseDatabase();
Query requisicoesEnviadas = firebaseRef.child("Requisicoes").child(usuarioAtual.getId())
.child("Enviadas").child(requisicao.getIdPessoa());
requisicoesEnviadas.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
RequisicoesCitty reqSnap = snapshot.getValue(RequisicoesCitty.class);
idComp = reqSnap.getIdPessoa();
recuperarPessoasModelos();
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
}
}
public void recuperarPessoasModelos(){
Log.d("Part 3", "Working");
DatabaseReference firebaseRef = ConfiguracaoFirebase.getFirebaseDatabase();
Query pessoas = firebaseRef.child("Perfil").child(idComp);
pessoas.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
ModeloPerfil pessoas = snapshot.getValue(ModeloPerfil.class);
pessoaQuestao.add(pessoas);
setPessoaQuestao(pessoaQuestao);
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
}
public void revelaPessoas(){
for(ModeloPerfil modelo: getPessoaQuestao()){
Log.d("Funcionar", modelo.getNome());
}
}
}
你明白我的問題嗎?我的目標是獲得back 和 display的值modelo.getNome(),revelaPessoas但它運行得比它應該的早
uj5u.com熱心網友回復:
你打電話recuperarPessoasModelos,每次都要carregarRequisicoes通過它的一個回圈for(RequisicoesCitty requisicao: requisicao) {。這完全沒問題,但我猜這recuperarPessoasModelos沒有正確處理這些多個呼叫。
如果您只想在recuperarPessoasModelos全部requisicao完成后呼叫,您可以檢查這樣的計數器:
List snapshots = new List(); // ?? a list to track the snapshots we have already loaded
for(RequisicoesCitty requisicao: requisicao) {
Log.d("Part 2", "Working");
DatabaseReference firebaseRef = ConfiguracaoFirebase.getFirebaseDatabase();
Query requisicoesEnviadas = firebaseRef.child("Requisicoes").child(usuarioAtual.getId())
.child("Enviadas").child(requisicao.getIdPessoa());
requisicoesEnviadas.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
snapshots.add(snapshot); // ?? add snapshot to list
RequisicoesCitty reqSnap = snapshot.getValue(RequisicoesCitty.class);
idComp = reqSnap.getIdPessoa();
if (snapshots.size() == requisicao.size()) { // ?? check if we got all of them
recuperarPessoasModelos();
}
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
throw error.toException(); // ?? never ignore errors
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/391584.html
