2015-11-05 10 views
5

Hallo, ich möchte Delete Request an den Server senden mit Volley entlang Headers und Body-Parameter. aber ich bin nicht in der Lage Anfrage zu senden erfolgreichDelete Request Mit Header und Parameteres Volley

Was ich versucht habe

JSONObject jsonbObjj = new JSONObject(); 
try { 
    jsonbObjj.put("nombre", Integer.parseInt(no_of_addition 
      .getText().toString())); 
    jsonbObjj.put("cru", crue); 
    jsonbObjj.put("annee", 2010); 
} catch (JSONException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} 
VolleyRequest mVolleyRequest = new VolleyRequest(
     Method.DELETE, url, jsonbObjj, 

     new Listener<JSONObject>() { 

      @Override 
      public void onResponse(JSONObject jsonObject) { 
       // TODO Auto-generated method stub 

       if (pDialog != null) { 
        pDialog.dismiss(); 
       } 
       Log.e("Server Response", "response = " 
         + jsonObject.toString()); 
      } 

     }, new ErrorListener() { 

      @Override 
      public void onErrorResponse(VolleyError arg0) { 
       // TODO Auto-generated method stub 
       if (pDialog != null) { 
        pDialog.dismiss(); 
       } 
       Log.e("Error Response", 
         "Error " + arg0.getMessage()); 
       Log.e("Error Response", 
         "Error = " + arg0.getCause()); 

      } 
     }, mUserSession.getUserEmail(), mUserSession 
       .getUserPassword(), false); 

ApplicationController.getInstance().addToRequestQueue(
     mVolleyRequest, "deleteRequest"); 

und hier ist meine VolleyRequest Anfrage Klasse

public class VolleyRequest extends JsonObjectRequest { 

    String email, pass; 
    boolean saveCookeis; 

    public VolleyRequest(int method, String url, JSONObject jsonRequest, 
      Listener<JSONObject> listener, ErrorListener errorListener, 
      String email, String pass, boolean saveCookie) { 
     super(method, url, jsonRequest, listener, errorListener); 
     // TODO Auto-generated constructor stub 
     this.email = email; 
     this.pass = pass; 
     this.saveCookeis = saveCookie; 
    } 

    public VolleyRequest(int method, String url, JSONObject jsonRequest, 
      Listener<JSONObject> listener, ErrorListener errorListener) { 
     super(Method.POST, url, jsonRequest, listener, errorListener); 
     // TODO Auto-generated constructor stub 

    } 

    @Override 
    public Map<String, String> getHeaders() throws AuthFailureError { 
     // TODO Auto-generated method stub 
      HashMap<String, String> params = new HashMap<String, String>(); 

      String auth = ""; 
      try { 
       auth = android.util.Base64.encodeToString(
         (this.email + ":" + this.pass).getBytes("UTF-8"), 
         android.util.Base64.DEFAULT); 
      } catch (UnsupportedEncodingException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 

      params.put("Authorization", auth); 
      return params; 
    } 

    @Override 
    protected Response<JSONObject> parseNetworkResponse(NetworkResponse response) { 
     // TODO Auto-generated method stub 

     if (saveCookeis) { 
      try { 
       String jsonString = new String(response.data, 
         HttpHeaderParser.parseCharset(response.headers)); 

       ApplicationController.getInstance().checkSessionCookie(
         response.headers); 

       return Response.success(new JSONObject(jsonString), 
         HttpHeaderParser.parseCacheHeaders(response)); 

      } catch (UnsupportedEncodingException e) { 
       return Response.error(new ParseError(e)); 
      } catch (JSONException je) { 
       return Response.error(new ParseError(je)); 
      } 
     } 
     return super.parseNetworkResponse(response); 

    } 

} 

Wenn ich diesen Code habe ich versucht, 400 Antwortcode erhalten Fehler Bitte lassen Sie mich wissen, wenn mir jemand helfen kann .. das, was ich falsch mache. Danke

hier die Screenshots für Löschen Api, die ich getestet und es funktioniert gut.

I need to send this Data to server

And here is the response form server

+0

Hallo! Da ich keine Arbeitsberechtigungsnachweise habe (user, pass), ist der Antwortcode, den ich mit deiner Server-URL bekommen habe, 500, nicht 400 :) – BNK

+0

Ich denke du kannst es mit 'params.put (" Authorization "," Basic "+) versuchen auth); ' – BNK

+0

es funktioniert nicht mit params. und m erhalten 400, während ich Anfrage von der Anwendung sende, aber es funktioniert gut, wenn ich URL vom Browser trete .. mein Benutzername wird in Bild spezifiziert und Durchlauf ist 1234, wenn Sie überprüfen können, überprüfen Sie bitte es und sagen Sie mir, was ich falsch mache. Danke –

Antwort

5

UPDATE:

Ich habe mein Arbeitsbeispielprojekt GitHub geschrieben java.net.ProtocolException: DELETE does not support writing zu beheben, nehmen Sie bitte einen Blick.


Ihre App bekam 400 Code-Fehler, da der Datenkörper nicht mit DELETE Anfrage gesendet hat.

Innen HurlStack.java, finden Sie wie folgt vor:

  case Method.DELETE: 
       connection.setRequestMethod("DELETE"); 
       break; 
      case Method.POST: 
       connection.setRequestMethod("POST"); 
       addBodyIfExists(connection, request); 
       break; 

So können wir DELETE Anfrage ignoriert Körperdaten sehen. Es gibt eine Abhilfe, das heißt Sie eine CustomHurlStack Klasse erstellen (kopieren Sie alle Inhalte von HurlStack oben), mit nur Modifikation wie folgt zusammen:

  case Request.Method.DELETE: 
       connection.setRequestMethod("DELETE"); 
       addBodyIfExists(connection, request); 
       break; 

Dann in Ihrer Tätigkeit, rufen:

CustomHurlStack customHurlStack = new CustomHurlStack(); 
RequestQueue queue = Volley.newRequestQueue(this, customHurlStack); 

Bitte Beachten Sie, dass diese Problemumgehung nur für API21 + funktioniert (API20 habe ich nicht getestet). Von API19- wird java.net.ProtocolException: DELETE does not support writing geworfen.

P/S: in useLibrary 'org.apache.http.legacy' in Ihrer build.gradle-Datei, wenn Sie Ihre App compileSdkVersion 23 und Sie Fehler, wenn CustomHurlStack Klasse erstellen.

Hoffe, das hilft!

+0

können Sie bitte sagen, wie kann ich erstellen newRequestQueue-Methode wie hier http://StackOverflow.com/a/30748487/3593066http://Stackoverflow.com/a/30748487/3593066. m etwas verwirrt bitte erklären, weil ich diesen Fehler bekomme java.net.ProtocolException: DELETE unterstützt nicht Schreiben –

+0

Wenn Sie Kontrolle über serverseitige App (Web-Service), empfehle ich, dass Sie ändern, so dass DELETE-Anfrage URL-Parameter stattdessen verwendet von body params – BNK

+0

das ist das Hauptproblem ... Ich habe keinen Zugriff auf Web-Service –