2016-07-11 12 views
0

Ich benutze die volley-Bibliothek, um die Antwort zu erhalten, die meiste Zeit funktioniert es gut für einige Szenarien, die ich bekomme der oben genannte Fehler, wenn ich versuche, Browser einchecken es funktioniert gut. geben Sie bitte einen Vorschlag, um das zu lösen. Ich versuche, den Zwischenspeicher zu entfernen und überprüfte sogar - obwohl Problem dasselbe bleibt, ich habe nicht verstanden, wo ich falsch mache.com.android.volley.NoConnectionError: java.net.ProtocolException: Unerwartete Statuszeile: <! DOCTYPE html>

ich die folgende Störung erhalten

ava.lang.NullPointerException: Attempt to read from field 'byte[] com.android.volley.NetworkResponse.data' on a null object reference 
                at com.pcnc.bop.helpers.VolleyRequest$2.onErrorResponse(VolleyRequest.java:98) 
                at com.android.volley.Request.deliverError(Request.java:577) 
                at com.android.volley.ExecutorDelivery$ResponseDeliveryRunnable.run(ExecutorDelivery.java:101) 
                at android.os.Handler.handleCallback(Handler.java:739) 
                at android.os.Handler.dispatchMessage(Handler.java:95) 
                at android.os.Looper.loop(Looper.java:135) 
                at android.app.ActivityThread.main(ActivityThread.java:5343) 
                at java.lang.reflect.Method.invoke(Native Method) 
                at java.lang.reflect.Method.invoke(Method.java:372) 
                at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:905) 
                at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:700) 

Das ist meine Volley-Anfrage Snippet

public void requestString(final String requestName, 
           final String webserviceUrl, 
           final Map<Object, Object> requestParams, final int webMethod, 
           final boolean getCache) { 
     LogUtils.i("Sending Request", webserviceUrl); 
     StringRequest stringRequest = new StringRequest(webMethod, 
       webserviceUrl, new Response.Listener<String>() { 
      @Override 
      public void onResponse(String response) { 
       LogUtils.i("Response", response); 
       mRequestCompletedListener.onRequestCompleted(
         requestName, true, response, null); 
      } 
     }, new Response.ErrorListener() { 

      @Override 
      public void onErrorResponse(VolleyError error) { 

       String errorResponse = null; 

       if (getCache) { 
        final Cache cache = AppController.getInstance() 
          .getRequestQueue().getCache(); 
        final Entry entry = cache.get(webserviceUrl); 
        if (entry.data != null) { 
         try { 
          errorResponse = new String(entry.data, "UTF-8"); 
          mRequestCompletedListener 
            .onRequestCompleted(requestName, 
              true, errorResponse, null); 
          return; 
         } catch (UnsupportedEncodingException e) { 
          LogUtils.e(TAG, e); 
         } 
        } else { 
         LogUtils.e(TAG, requestName 
           + " Cache does not exist"); 
        } 
       } 
       try { 
        VolleyError responseError = new VolleyError(
          new String(error.networkResponse.data)); 
        LogUtils.i("ErrorResponse", responseError.getMessage()); 
        try { 
         if (responseError != null) { 
          final JSONObject responseJson = new JSONObject(responseError.getMessage()); 
          // Show Alert Information 
          errorResponse = responseJson.getString(AppConstants.MESSAGE); 
         } 
        } catch (Exception e) { 
         errorResponse = "Unknown"; 
        } 
       } catch (Exception e) { 
        LogUtils.e(TAG, e); 
       } 
       mRequestCompletedListener.onRequestCompleted(
         requestName, false, null, 
         errorResponse); 
      } 
     }) { 
      @Override 
      protected Map<String, String> getParams() throws AuthFailureError { 
       @SuppressWarnings("unchecked") 
       final Map<String, String> params = (HashMap<String, String>) requestParams 
         .get(VolleyRequestConstants.HTTP_PARAMS); 
       if (params != null) { 
        return params; 
       } 
       return super.getParams(); 
      } 

      @Override 
      public Map<String, String> getHeaders() throws AuthFailureError { 
       @SuppressWarnings("unchecked") 
       final Map<String, String> headers = (HashMap<String, String>) requestParams 
         .get(VolleyRequestConstants.HTTP_HEADERS); 
       if (headers != null) { 
        return headers; 
       } 
       return super.getHeaders(); 
      } 

      @Override 
      public com.android.volley.Request.Priority getPriority() { 
       final Priority priority = (com.android.volley.Request.Priority) requestParams 
         .get(VolleyRequestConstants.HTTP_PRIORITY); 
       if (priority != null) { 
        return priority; 
       } 
       return super.getPriority(); 
      } 

      @Override 
      public String getBodyContentType() { 
       final String contentType = (String) requestParams 
         .get(VolleyRequestConstants.HTTP_CONTENT_TYPE); 
       if (contentType != null) { 
        return contentType; 
       } 
       return super.getBodyContentType(); 
      } 

      @Override 
      public byte[] getBody() throws AuthFailureError { 
       final byte[] body = (byte[]) requestParams 
         .get(VolleyRequestConstants.HTTP_BODY_CONTENT); 
       if (body != null) { 
        return body; 
       } 
       return super.getBody(); 
      } 
     }; 

    /* DefaultRetryPolicy retryPolicy = new DefaultRetryPolicy(0, -1, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT); 
     stringRequest.setRetryPolicy(retryPolicy);*/ 
     stringRequest.setTag(requestName); 
     // Adding String request to request queue 
     AppController.getInstance().addToRequestQueue(stringRequest); 
    } 
+0

hinzu Sie vermissen INTERNET Erlaubnis in 'Manifest.xml' .. !! –

+0

keine Berechtigungen und alles, was ich richtig erwähnt habe. Dieses Problem tritt in seltenen Fällen auf. – Shine

+0

Dann könnte es ein Problem sein, wenn die Internetverbindung langsam ist .. !! –

Antwort

0

die Zeilen wie:

@Override 
public void onErrorResponse(VolleyError error) { 
    //... 
    VolleyError responseError = new VolleyError(new String(error.networkResponse.data)); 
    //.. 
} 

verursacht, welchen Fehler Sie konfrontiert sind, als error.networkResponse kann null drehen. Fügen Sie also den Null-Check oder den zusätzlichen catch Block oder ähnlich

+0

Ich habe diese Zeile bereits in den obigen Code – Shine

+0

Sie meinen, es hat keine Ausnahmen zuvor geworfen? – injecteer

+0

ja hat keine Ausnahme geworfen. – Shine