2017-02-21 44 views
0

Я новичок в запросах Volley для Android. Мне удалось сделать сообщение и получить запросы на сервер и получить ответ.Выполнение запроса на волейбол с возвратным значением

public void getCardDetails() throws UnsupportedEncodingException, NoSuchAlgorithmException, InvalidKeyException { 
StringRequest postRequest = new StringRequest(Request.Method.POST, url, 
      new Response.Listener<String>() { 
       @Override 
       public void onResponse(String response) { 
        // response 
        Log.d("Response from server","Customer Account"+response); 

        try { 
         results = signInActivity.splitQuery(response); 

         String encodedMessage = results.get("encodedMessage"); 
         String serverSignature = results.get("signature"); 
         //Log.d("CustomerAccount","encodedMessage:"+ encodedMessage); 


         String decodeMessage = security.decodeBase64(encodedMessage); 
         Log.d("CustomerAccount","DecodedMessage"+ decodeMessage); 
         customerDetailsXML = decodeMessage; 



         try { 
          String computedSignature = security.hashMac(decodeMessage, signature_key); 



           int responseCode = xmlHandler.getResponseCode(decodeMessage); 
           Log.d("CustomerAccount","Response Code: "+responseCode); 

          if (responseCode == 1001){ 
           getCardBalance(); 


           Log.d("CustomerAccount","Success"); 
          } 
         } catch (InvalidKeyException e) { 
          e.printStackTrace(); 
         } catch (NoSuchAlgorithmException e) { 
          e.printStackTrace(); 
         } catch (JDOMException e) { 
          e.printStackTrace(); 
         } catch (IOException e) { 
          e.printStackTrace(); 
         } 


        } catch (UnsupportedEncodingException e) { 
         e.printStackTrace(); 
        } 


       } 
      }, 
      new Response.ErrorListener() { 
       @Override 
       public void onErrorResponse(VolleyError error) { 
        // error 
        Log.d("Error.Response", error.toString()); 
       } 
      } 

    ) { 
     @Override 
     public Map<String, String> getHeaders() throws AuthFailureError { 
      HashMap<String, String> headers = new HashMap<>(); 
      headers.put("Content-type", "application/x-www-form-urlencoded;charset=\"utf-8\""); 
      headers.put("Accept", "application/x-www-form-urlencoded"); 
      headers.put("Cache-Control", "no-cache"); 
      headers.put("Pragma", "no-cache"); 
      headers.put("User-Agent", "Mozilla/5.0"); 
      headers.put("Content-length", dataStream.toString()); 
      return headers; 
     } 

     @Override 
     protected Map<String, String> getParams() { 
      Map<String, String> params = new HashMap<String, String>(); 
      params.put("encodedMessage", encodedMessage_req); 
      params.put("signature", signature); 

      return params; 
     } 
    }; 
    Volley.newRequestQueue(this).add(postRequest); 

} 

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

Любые указатели на то, как этого достичь?

+1

Создать класс интерфейса и получить ответ, то реализовать там, где вы выполняете апи – Vadivel

+0

У вас уже есть 'customerDetailsXML', так где же вопрос? –

+0

КлиентDetailsXML имеет значение null вне метода запроса волейбола. Если есть способ исправить это, тогда это будет хорошо. – pavlos

ответ

0

сделать что-то вроде этого:

  1. сделать класс интерфейса:

    public interface MyListener{ public void myMethod(String response); }

  2. изменить способ входа: public void getCardDetails(MyListener listener)

  3. в ваш public void onResponse(String response)

добавить следующее:

`listener.myMethod(response);` 
+0

У Volley есть свой класс слушателей. Не нужен ваш собственный интерфейс –

+0

@ cricket_007, если вы хотите выйти из слушателя волейбола и сделать следующее действие в другом месте, вы должны использовать свой собственный слушатель. :) почему вы все делаете в прослушивании волейбола? это не подходит. потому что ваша сеть остается занятой. –

+0

Несомненно, но вы теряете прослушиватель ошибок по пути с вашей текущей реализацией –