2016-04-05 14 views
6

में प्रतिक्रिया से शीर्षलेख प्राप्त करना मैं वॉली के साथ काम कर रहा हूं, मैं एक सर्वर से अनुरोध करना चाहता हूं जो मुझे "दृश्यमान परत" में एक JSON लौटाता है (मैं इसे वेब ब्राउज़र में देख सकता हूं)। मेरी समस्या यह है कि सर्वर मेरे शीर्ष लेख में मुझे वापस लौटाता है जो मुझे अपने ऐप में प्राप्त करने की ज़रूरत है, लेकिन मैं हेडर को अनुरोध से प्राप्त नहीं कर पा रहा हूं।वॉली

मैं एक लंबे समय खोज की है, लेकिन मैं कुछ भी उपयोगी (Onlye अनुरोध हैडर के लिए डेटा जोड़ने, लेकिन header's प्रतिक्रिया से डेटा नहीं मिल रहा है)

किसी को भी जानता है कि लागू करने के लिए कैसे पाया नहीं किया?

उत्तर

12
करने के लिए

निपटने अनुरोध का एक उदाहरण है अपने अनुरोध में parseNetworkResponse को ओवरराइड करने के लिए आवश्यक शीर्षलेख प्राप्त करें।

उदाहरण के लिए JsonObjectRequest:

public class MetaRequest extends JsonObjectRequest { 

    public MetaRequest(int method, String url, JSONObject jsonRequest, Response.Listener 
      <JSONObject> listener, Response.ErrorListener errorListener) { 
     super(method, url, jsonRequest, listener, errorListener); 
    } 

    public MetaRequest(String url, JSONObject jsonRequest, Response.Listener<JSONObject> 
      listener, Response.ErrorListener errorListener) { 
     super(url, jsonRequest, listener, errorListener); 
    } 

    @Override 
    protected Response<JSONObject> parseNetworkResponse(NetworkResponse response) { 
     try { 
      String jsonString = new String(response.data, 
        HttpHeaderParser.parseCharset(response.headers, PROTOCOL_CHARSET)); 
      JSONObject jsonResponse = new JSONObject(jsonString); 
      jsonResponse.put("headers", new JSONObject(response.headers)); 
      return Response.success(jsonResponse, 
        HttpHeaderParser.parseCacheHeaders(response)); 
     } catch (UnsupportedEncodingException e) { 
      return Response.error(new ParseError(e)); 
     } catch (JSONException je) { 
      return Response.error(new ParseError(je)); 
     } 
    } 
} 
+0

धन्यवाद !! यह काम करता हैं!! मैं JSONObject वापस हेडर जोड़ने के बजाय parseNetworkResponse में शीर्षकों में अपना काम कर रहा हूं। – Chopi

1

यदि अनुरोध json लौटा रहा है आप नहीं तो समस्या Android एप्लिकेशन

यहाँ

से नहीं json से है यह सामान्य रूप से पढ़ने के लिए सक्षम होना चाहिए

RequestQueue queue = Volley.newRequestQueue(MainActivity.this); 
    JsonArrayRequest getRequest = new JsonArrayRequest(Request.Method.GET, "http://yourlink+parameters", new Response.Listener<JSONArray>() { 
     @Override 
     public void onResponse(JSONArray response) { 
      List<YourObject> reservations = null; 
      try { 

       YourObject= new ArrayList<YourObject>(); 
       for (int i = 0; i < response.length(); i++) { 
        JSONObject obj = response.getJSONObject(i); 
        YourObjectr = new YourObject(obj.getInt("id"), obj.getInt("user_id"),format.parse(obj.getString("date")), obj.getString("address"), obj.getString("description")); 
         } 

        } catch (ParseException e) { 
         e.printStackTrace(); 
        } 

       } 

      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 
     } 
    }, new Response.ErrorListener() { 
     @Override 
     public void onErrorResponse(VolleyError volleyError) { 
      if (volleyError.networkResponse != null && volleyError.networkResponse.data != null) { 
       VolleyError error = new VolleyError(new String(volleyError.networkResponse.data)); 
       volleyError = error; 
       Log.i("error", "error :" + volleyError.getMessage()); 
       try { 
        JSONObject obj = new JSONObject(volleyError.getMessage()); 
        if (obj.getString("error").equals("token_expired")) { 
         Intent i = new Intent(MainActivity.this, LoginActivity.class); 
         startActivity(i); 
        } 
       } catch (JSONException e) { 
        e.printStackTrace(); 
       } 

      } else { 
       new AlertDialog.Builder(MainActivity.this) 
         .setTitle("connection problem") 
         .setMessage("check your connection") 
         .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() { 
          public void onClick(DialogInterface dialog, int which) { 
          } 
         }) 
         .setIcon(android.R.drawable.ic_dialog_alert) 
         .show(); 
      } 
     } 
    }); 

    queue.add(getRequest); 
+2

JsonArrayRequest के साथ आप http अनुरोध के शीर्षलेख जानकारी (उदाहरण कुकीज़) प्राप्त करने में सक्षम नहीं हैं। – Chopi

0

यह JSONArray डेटा और हेडर के साथ काम करने के लिए एक उदाहरण है।

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

public class JsonRequest extends JsonObjectRequest { 

    public JsonRequest(int method, String url, JSONObject jsonRequest, Response.Listener 
      <JSONObject> listener, Response.ErrorListener errorListener) { 
     super(method, url, jsonRequest, listener, errorListener); 
    } 

    @Override 
    protected Response<JSONObject> parseNetworkResponse(NetworkResponse response) { 
     try { 
      String jsonString = new String(response.data, 
        HttpHeaderParser.parseCharset(response.headers, PROTOCOL_CHARSET)); 

      JSONObject jsonResponse = new JSONObject(); 
      jsonResponse.put("data", new JSONArray(jsonString)); 
      jsonResponse.put("headers", new JSONObject(response.headers)); 

      return Response.success(jsonResponse, 
        HttpHeaderParser.parseCacheHeaders(response)); 
     } catch (UnsupportedEncodingException e) { 
      return Response.error(new ParseError(e)); 
     } catch (JSONException je) { 
      return Response.error(new ParseError(je)); 
     } 
    } 
} 

और आपके अनुरोध कोड में:

JsonRequest request = new JsonRequest 
     (Request.Method.POST, URL_API, payload, new Response.Listener<JSONObject>() { 

      @Override 
      public void onResponse(JSONObject response) { 
       try { 
        JSONArray data = response.getJSONArray("data"); 
        JSONObject headers = response.getJSONObject("headers"); 
       } catch (JSONException e) { 
        Log.e(LOG_TAG, Log.getStackTraceString(e)); 
       } 
      } 
     }, new Response.ErrorListener() { 

      @Override 
      public void onErrorResponse(VolleyError error) { 
       Log.e(LOG_TAG, Log.getStackTraceString(error)); 
      } 
     }); 

वॉली प्रलेखन Implementing a Custom Request में अपने स्वयं के कस्टम अनुरोध को लागू करने के बारे में अधिक जानकारी देखें।

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