我有一个使用Gson的截击请求,但我想填充一个带有截击响应的微调器。但这是同步。
EstadoRequestHelper.statesRequest(Request.Method.GET, EndpointURL.GET_ESTADO, null, new Response.Listener<Estado[]>() {
@Override
public void onResponse(Estado[] response) {
ArrayList<Estado> estadoArrayList = new ArrayList<>();
Estado estado = new Estado();
estado.setId(0);
estado.setDescricao("Selecione um estado");
estadoArrayList.add(estado);
estadoArrayList.addAll(Arrays.asList(response));
estadoAdapter = new EstadoAdapter(getActivity(), R.layout.simple_spinner_dropdown_item, estadoArrayList);
spn_estado.setAdapter(estadoAdapter);
//If i get the spn_estado selection here,
//it works, but i dont want to get it here...
progressDialogEstado.dismiss();
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
progressDialogEstado.dismiss();
Toast.makeText(getActivity(), "ERRO ESTADO", Toast.LENGTH_LONG).show();
}
});
如果我将spn_estado填充到请求中,它就会......但我不想将其填充到请求中...
private void veferyUser() {
usuario = UsuarioSingleton.getInstance().getUsuario();
if (usuario == null) {
et_telefone.setVisibility(View.GONE);
et_celular.setVisibility(View.GONE);
et_logradouro.setVisibility(View.GONE);
et_numero.setVisibility(View.GONE);
et_complemento.setVisibility(View.GONE);
et_bairro.setVisibility(View.GONE);
spn_cidade.setVisibility(View.GONE);
spn_estado.setVisibility(View.GONE);
} else {
et_nome.setText(usuario.getNome() != null ? usuario.getNome() : "");
et_cpf.setText(usuario.getCpf() != null ? usuario.getCpf() : "");
et_email.setText(usuario.getEmail() != null ? usuario.getEmail() : "");
et_telefone.setText(usuario.getTelefone() != null ? usuario.getTelefone() : "");
et_celular.setText(usuario.getCelular() != null ? usuario.getCelular() : "");
progressDialogEstado = Util.ProgressDialog(getActivity(), "Carregando Estados", getString(R.string.prompt_aguarde));
requestEstados();
if (usuario.getEndereco() != null) {
et_logradouro.setText(usuario.getEndereco().getLogradouro() != null ? usuario.getEndereco().getComplemento() : "");
et_numero.setText(String.valueOf(usuario.getEndereco().getNumero()));
et_complemento.setText(usuario.getEndereco().getComplemento() != null ? usuario.getEndereco().getComplemento() : "");
et_bairro.setText(usuario.getEndereco().getBairro() != null ? usuario.getEndereco().getBairro() : "");
if (usuario.getEndereco().getCidade() != null) {
spn_cidade.setSelection(usuario.getEndereco().getCidade().getId(), false);
if (usuario.getEndereco().getCidade().getEstado() != null) {
//I want to populate it here.
spn_estado.setSelection(usuario.getEndereco().getCidade().getEstado().getId(), false);
}
}
}
btn_registrar.setText(R.string.action_edit);
}
}
答案 0 :(得分:1)
使用RequestFuture:
RequestFuture<Estado[]> future = RequestFuture.newFuture();
EstadoRequestHelper.statesRequest(Request.Method.GET, EndpointURL.GET_ESTADO, null, future, future);
将请求添加到队列后,执行:
try {
Estado[] response = future.get();
ArrayList<Estado> estadoArrayList = new ArrayList<>();
Estado estado = new Estado();
estado.setId(0);
estado.setDescricao("Selecione um estado");
estadoArrayList.add(estado);
estadoArrayList.addAll(Arrays.asList(response));
estadoAdapter = new EstadoAdapter(getActivity(), R.layout.simple_spinner_dropdown_item, estadoArrayList);
spn_estado.setAdapter(estadoAdapter);
//If i get the spn_estado selection here,
//it works, but i dont want to get it here...
progressDialogEstado.dismiss();
} catch (InterruptedException e) {
// handle the interrupted error
} catch (ExecutionException e) {
progressDialogEstado.dismiss();
Toast.makeText(getActivity(), "ERRO ESTADO", Toast.LENGTH_LONG).show();
}
这是一个阻止呼叫,将在收到呼叫或错误后返回
请注意,虽然这可以回答您的问题,但更好的方法是确保代码的其他部分(例如,检查适配器)可以处理异步行为。