2015-02-04 7 views
7

com.android.volley.NoConnectionError: java.net.ProtocolException: Unbekannte Methode 'PATCH'; muss einer der folgenden sein [OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE]Fehler im Volley-Patch

StringRequest putRequest = new StringRequest(Request.Method.PATCH, url, 
       new Response.Listener<String>() 
       { 
        @Override 
        public void onResponse(String response) 
        { 

         Log.d("Response", response); 

        } 
       }, 
       new Response.ErrorListener() 
       { 
         @Override 
         public void onErrorResponse(VolleyError error) 
         { 


          Log.d("Error.Response", error.toString()); 

        } 
       } 
      ) { 

       @Override 
       protected Map<String, String> getParams() 
       { 
         Map<String, String> params = new HashMap<String, String>(); 
         params.put("name", "My Name"); 
         params.put("age", "11"); 

         return params; 
       } 

      }; 

Antwort

20

Sie sicher, Sie sind richtige Version von Volley-Bibliothek verwenden? Ich habe gerade Ihren Code in Lollipop ausprobiert und es funktioniert OK. Wenn Sie die Volley-Bibliothek als externes Projekt verwenden, überprüfen Sie die Schnittstelle Methode der Klasse Request im Paket com.android.volley. Es sollte eine PATCH-Variable enthalten.

public interface Method { 
     int DEPRECATED_GET_OR_POST = -1; 
     int GET = 0; 
     int POST = 1; 
     int PUT = 2; 
     int DELETE = 3; 
     int HEAD = 4; 
     int OPTIONS = 5; 
     int TRACE = 6; 
     int PATCH = 7; 
    } 

Wenn nicht, verwenden Sie die neueste Version von Volley-Bibliothek.

UPDATE:

Sie richtig sind, ist es diesen Fehler in Kitkat zeigen, aber nicht in Lollipop. Ich denke, das Hauptproblem ist, dass HTTPUrlConnection von Java PATCH nicht unterstützt. (Ich denke, es funktioniert in Lollipop, weil es Java 7 verwendet und HTTPUrlConnection von Java 7 unterstützt PATCH-Methode?) Sie können die OkHttp-Bibliothek verwenden, um dieses Problem zu beheben. Die okhttp-URLConnection Modul implementiert den java.net.HttpURLConnection

die folgenden jar Ordner auf Ihrem Libs hinzufügen:
okhttp-2.2.0.jar
okhttp-urlconnection-2.2.0.jar
okio-1.2.0.jar

eine OkHttpStack Klasse erstellen:

package com.example.temp;  

import java.io.IOException; 
import java.net.HttpURLConnection; 
import java.net.URL; 

import com.android.volley.toolbox.HurlStack; 
import com.squareup.okhttp.OkHttpClient; 
import com.squareup.okhttp.OkUrlFactory; 

public class OkHttpStack extends HurlStack { 
    private final OkUrlFactory mFactory; 

    public OkHttpStack() { 
     this(new OkHttpClient()); 
    } 

    public OkHttpStack(OkHttpClient client) { 
     if (client == null) { 
      throw new NullPointerException("Client must not be null."); 
     } 
     mFactory = new OkUrlFactory(client); 
    } 

    @Override protected HttpURLConnection createConnection(URL url) throws IOException { 
     return mFactory.open(url); 
    } 
} 

Verwenden Sie den folgenden Konstruktor, um eine Volley RequestQueue zu erstellen:

Volley.newRequestQueue(getApplicationContext(),new OkHttpStack()).add(putRequest); 

Es funktioniert jetzt für mich auf Kitkat.

+0

letzte Version verwendet und PATCH innerhalb deklariert Anfrage Klasse – sreejith

+0

Ich habe die Antwort aktualisiert. – User31689

+0

danke für das Update. es funktioniert – sreejith

-1

Während des Sendens der Anfrage POST verwenden. In Überschriften überschreiben Sie einfach HTTP-Methode zu PATCH. Für mich funktioniert es jetzt auch in der Kitkat-Version.

header.put("X-HTTP-Method-Override", "PATCH"); 
+0

Ihr Server sollte Method Override zulassen, damit dies funktioniert –