2017-01-18 6 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

はい、それは魅力のように機能しました。ご協力いただきありがとうございます。ケースが閉まった。 upvoteを与えたが、それを有効にするには低すぎる担当者。 – 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(); 
        } 
       }) { 


     }; 
関連する問題