Volley补丁中的错误

sre*_*ith 7 java android android-volley

com.android.volley.NoConnectionError:java.net.ProtocolException:未知方法'PATCH'; 必须是[OPTIONS,GET,HEAD,POST,PUT,DELETE,TRACE]之一

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

             };
Run Code Online (Sandbox Code Playgroud)

Use*_*689 22

您确定使用的是Volley Library的正确版本吗?我只是在Lollipop中尝试了你的代码,它运行正常.如果您使用Volley库作为外部项目,请检查com.android.volley包中Request类的Method接口.它应该有一个PATCH变量.

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;
    }
Run Code Online (Sandbox Code Playgroud)

如果没有,请使用最新版本的Volley库.

更新:

你是对的,它在Kitkat中显示此错误,但在Lollipop中没有.我想主要问题是Java的HTTPUrlConnection不支持PATCH.(我猜它在Lollipop中有效,因为它使用Java 7而Java 7的HTTPUrlConnection支持PATCH方法?)无论如何,你可以使用OkHttp库来解决这个问题.okhttp-urlconnection模块实现java.net.HttpURLConnection

将以下jar添加到libs文件夹中:
okhttp-2.2.0.jar
okhttp-urlconnection-2.2.0.jar
okio-1.2.0.jar

创建一个OkHttpStack类:

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

使用以下构造函数创建Volley RequestQueue:

Volley.newRequestQueue(getApplicationContext(),new OkHttpStack()).add(putRequest);
Run Code Online (Sandbox Code Playgroud)

它现在在Kitkat为我工作.