Error in Volley Patch

前端 未结 2 1966

com.android.volley.NoConnectionError: java.net.ProtocolException: Unknown method \'PATCH\'; must be one of [OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE]

Str         


        
相关标签:
2条回答
  • 2021-01-18 03:53

    While sending request use POST. In headers just override http method to PATCH. For me now its working in volley even in kitkat version.

    header.put("X-HTTP-Method-Override", "PATCH");
    
    0 讨论(0)
  • 2021-01-18 04:14

    Are you sure you are using correct version of Volley Library? I just tried your code in Lollipop and it is working OK. If you are using Volley library as external project, check the Method interface of Request class in com.android.volley package. It should have a PATCH variable in it.

    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;
        }
    

    If not, use the latest version of Volley library.

    UPDATE:

    You are correct, it is showing this error in Kitkat, but not in Lollipop. I guess the main problem is that HTTPUrlConnection of Java does not support PATCH. (I guess it works in Lollipop because it is using Java 7 and HTTPUrlConnection of Java 7 supports PATCH method?) Anyhow, You can use the OkHttp Library to correct this problem. The okhttp-urlconnection module implements the java.net.HttpURLConnection

    Add the following jar to your libs folder:
    okhttp-2.2.0.jar
    okhttp-urlconnection-2.2.0.jar
    okio-1.2.0.jar

    Create a OkHttpStack class:

    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);
        }
    }
    

    Use the following constructor to create a Volley RequestQueue:

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

    It is working for me on Kitkat now.

    0 讨论(0)
提交回复
热议问题