2016-05-17 13 views
0

私はGsonを使ってボレーリクエストをしましたが、スピナーにボレー応答を入力したいと思います。しかしそれはassyncです。Volley with Gson Syncリクエスト

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

正確に達成したいことは何ですか? asyncがなぜ問題なのですか? – djodjo

+0

他のメソッドに到達すると、アダプタがnullになります...私のspn_estadoスピンナの位置を取得できません –

答えて

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(); 
     } 

これはブロッキングコールで、コールまたはエラーが受信された後に返されます。

これはあなたの質問に答える一方で、問題を処理するためのより良い方法は、コードの他の部分チェックされているなど)は、非同期動作を処理できます。

+0

これらの括弧を開いていませんでした...将来受け付けません。私はあなたのために私の質問を更新し、何が起きているのか...なぜ私は同期要求を使用したいのですか... –

+0

「それらの括弧を開いて作業していませんでした...将来はそれを受け入れませんか? – djodjo

+0

Android Studioは私にRequestFutureを使用するように指示します future = RequestFuture.newFuture();申し訳ありませんが、私はアンドロイドの新しいです:( –

関連する問題