2015-02-04 10 views
7

com.android.volley.NoConnectionError: java.net.ProtocolException: अज्ञात विधि 'पैच'; से एक होना चाहिए [विकल्प प्राप्त, प्रमुख, पोस्ट, डाल हटाएँ, ट्रेस]वॉली पैच में त्रुटि

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

      }; 

उत्तर

20

क्या आप वॉली पुस्तकालय का सही संस्करण का उपयोग कर रहे हैं? मैंने लॉलीपॉप में बस अपना कोड आज़माया और यह ठीक काम कर रहा है। यदि आप बाहरी परियोजना के रूप में वॉली लाइब्रेरी का उपयोग कर रहे हैं, तो com.android.volley पैकेज में अनुरोध कक्षा का विधि इंटरफ़ेस देखें। इसमें एक पैच चर होना चाहिए।

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

यदि नहीं, तो वॉली लाइब्रेरी के नवीनतम संस्करण का उपयोग करें।

अद्यतन:

आप कर रहे हैं सही है, यह Kitkat में इस त्रुटि लॉलीपॉप में दिखाया जा रहा है, लेकिन नहीं। मुझे लगता है कि मुख्य समस्या यह है कि जावा का HTTPUrlConnection पैच का समर्थन नहीं करता है। (मुझे लगता है कि यह लॉलीपॉप में काम करता है क्योंकि यह जावा 7 का उपयोग कर रहा है और जावा 7 का HTTPUrlConnection पैच विधि का समर्थन करता है?) किसी भी तरह, आप इस समस्या को ठीक करने के लिए ओकेएचटीपी लाइब्रेरी का उपयोग कर सकते हैं।

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); 
    } 
} 
:
okhttp-2.2.0.jar
okhttp-urlconnection-2.2.0.jar
okio-1.2.0.jar

एक OkHttpStack वर्ग बनाएँ: okhttp-urlconnection मॉड्यूल java.net.HttpURLConnection

अपने libs फ़ोल्डर के लिए निम्न जार जोड़े को लागू करता है

वॉली अनुरोध बनाने के लिए निम्न कन्स्ट्रक्टर का उपयोग करें:

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

अब यह Kitkat पर मेरे लिए काम कर रहा है।

+0

अनुरोधित संस्करण – sreejith

+0

के अंदर घोषित नवीनतम संस्करण और पैच का उपयोग किया गया मैंने जवाब अपडेट किया है। अद्यतन के लिए – User31689

+0

धन्यवाद। इसका काम – sreejith

-1

अनुरोध भेजते समय POST का उपयोग करते समय। हेडर में बस पैच को http विधि ओवरराइड करें। मेरे लिए अब यह किटकैट संस्करण में भी वॉली में काम कर रहा है।

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

आपके सर्वर को इस काम को करने के लिए विधि ओवरराइड की अनुमति देनी चाहिए –

संबंधित मुद्दे