【发布时间】:2022-01-24 03:16:09
【问题描述】:
我正在尝试检索函数recuperarPessoasModelo() 中生成的数组列表,但它的运行时间比我需要的要晚得多,因此传递给revelaPessoas() 的值为空,有谁知道我可以运行此函数的任何方法并在执行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());
}
}
}
你明白我的问题吗?我的目标是让revelaPessoas 内部的modelo.getNome() 值返回并显示,但它的运行速度比预期的要快
【问题讨论】:
标签: java loops firebase-realtime-database arraylist methods