2017-01-18 4 views
2

Я не могу найти для этого решения. На данный момент мне кажется, что я должен выбирать между получением нормального ответа html или получением только заголовков ответов.Android Volley - Получить ответ Заголовок и прочитать html

Есть ли способ изменить мой код, чтобы получить оба из них?

Текущий код (дает только заголовки ответа)

StringRequest stringRequest = new StringRequest(Request.Method.GET, loginURL, 
       new Response.Listener<String>() { 
        @Override 
        public void onResponse(String response) { 


          String responseSession = response.substring(0,response.indexOf(";")); 



        } 
       }, 
       new Response.ErrorListener() { 
        @Override 
        public void onErrorResponse(VolleyError error) { 
         Toast.makeText(LoginActivity.this,error.toString(),Toast.LENGTH_LONG).show(); 
        } 
       }){ 

      @Override 
      protected Response<String> parseNetworkResponse(NetworkResponse networkResponse) { 
       String sessionId = networkResponse.headers.get("Set-Cookie"); 
       com.android.volley.Response<String> result = com.android.volley.Response.success(sessionId, 
         HttpHeaderParser.parseCacheHeaders(networkResponse)); 
       return result; 
      } 

     }; 

     RequestQueue requestQueue = Volley.newRequestQueue(this); 
     requestQueue.add(stringRequest); 
+0

ли вам попробовал мой ответ? – Krish

+0

Да, и это сработало как шарм. Спасибо за вашу помощь. Дело закрыто. Получил преимущество, но слишком низкий показатель, чтобы он вступил в силу. – Sourcey86

ответ

1

Используйте пользовательский класс запрос для этой цели,

public class CustomStringRequest extends Request<CustomStringRequest.ResponseM> { 


    private Response.Listener<CustomStringRequest.ResponseM> mListener; 

    public CustomStringRequest(int method, String url, Response.Listener<CustomStringRequest.ResponseM> responseListener, Response.ErrorListener listener) { 
     super(method, url, listener); 
     this.mListener = responseListener; 
    } 


    @Override 
    protected void deliverResponse(ResponseM response) { 
     this.mListener.onResponse(response); 
    } 

    @Override 
    protected Response<ResponseM> parseNetworkResponse(NetworkResponse response) { 
     String parsed; 
     try { 
      parsed = new String(response.data, HttpHeaderParser.parseCharset(response.headers)); 
     } catch (UnsupportedEncodingException e) { 
      parsed = new String(response.data); 
     } 

     ResponseM responseM = new ResponseM(); 
     responseM.headers = response.headers; 
     responseM.response = parsed; 

     return Response.success(responseM, HttpHeaderParser.parseCacheHeaders(response)); 
    } 


    public static class ResponseM { 
     Map<String, String> headers; 
     String response; 
    } 

} 

И изменить код, как это,

CustomStringRequest stringRequest = new CustomStringRequest(Request.Method.GET, loginURL, 
       new Response.Listener<CustomStringRequest.ResponseM>() { 
        @Override 
        public void onResponse(CustomStringRequest.ResponseM result) { 

         //From here you will get headers 
         String sessionId = result.headers.get("Set-Cookie"); 
         String responseString = result.response; 

        } 


       }, 
       new Response.ErrorListener() { 
        @Override 
        public void onErrorResponse(VolleyError error) { 
         Toast.makeText(LoginActivity.this,error.toString(),Toast.LENGTH_LONG).show(); 
        } 
       }) { 


     }; 

 Смежные вопросы

  • Нет связанных вопросов^_^