2014-06-25 13 views
7

मैं वॉली के साथ JSONArray GET अनुरोध भेज रहा हूं, और यह निर्दिष्ट JSON सरणी लौटा रहा है। यहां मेरा अनुरोध है:पार्स एंड्रॉइड वॉली JSONArray प्रतिक्रिया

JsonArrayRequest getRequest = new JsonArrayRequest(url, 
        new Response.Listener<JSONArray>() 
        { 
         @Override public void onResponse(JSONArray response) { 

          Log.d("Response", response.toString()); 
         } 
        }, 
        new Response.ErrorListener() 
        { 
         @Override public void onErrorResponse(VolleyError error) { 
          Log.d("Error.Response", error.toString()); 
         } 
        } 
       ); 
        VolleySingleton.getInstance(this).addToRequestQueue(getRequest); //Call to get dashboard feed 
} 

जैसा कि आप देख सकते हैं, मैं वर्तमान में प्रतिक्रिया को लॉग आउट कर रहा हूं। मैं ऐरे को पार्स करना चाहता हूं और परिणाम को सूची दृश्य में प्रदर्शित करना चाहता हूं। इसके लिए प्रलेखन बहुत अच्छा नहीं है, और मैं Android dev के संदर्भ में बहुत हरा हूं। वॉली से JSON सरणी को पार्स करने और परिणामों को सूची दृश्य में प्रदर्शित करने का उचित तरीका क्या है? I've gathered कि मुझे parseNetworkResponse का उपयोग करना चाहिए, लेकिन यह सुनिश्चित नहीं करना चाहिए कि कैसे कार्यान्वित किया जाए।

उत्तर

38

से इसके बारे में और अधिक जानते हैं, मैं JSON पार्सिंग के लिए जीएसओएन लाइब्रेरी से चिपकने की सलाह दूंगा। यहाँ एम्बेडेड JSON प्रसंस्करण के साथ एक वॉली अनुरोध तो कैसा नज़र आ सकता है:

import java.io.UnsupportedEncodingException; 

import com.android.volley.NetworkResponse; 
import com.android.volley.ParseError; 
import com.android.volley.Request; 
import com.android.volley.Response; 
import com.android.volley.Response.ErrorListener; 
import com.android.volley.Response.Listener; 
import com.android.volley.toolbox.HttpHeaderParser; 
import com.google.gson.Gson; 
import com.google.gson.JsonSyntaxException; 

/** 
* Volley GET request which parses JSON server response into Java object. 
*/ 
public class GsonRequest<T> extends Request<T> { 

    /** JSON parsing engine */ 
    protected final Gson gson; 

    /** class of type of response */ 
    protected final Class<T> clazz; 

    /** result listener */ 
    private final Listener<T> listener; 

    public GsonRequest(String url, Class<T> clazz, Listener<T> listener, 
      ErrorListener errorListener) { 
     super(Method.GET, url, errorListener); 

     this.clazz = clazz; 
     this.listener = listener; 
     this.gson = new Gson(); 
    } 

    @Override 
    protected void deliverResponse(T response) { 
     listener.onResponse(response); 
    } 

    @Override 
    protected Response<T> parseNetworkResponse(NetworkResponse response) { 
     try { 
      String json = new String(
        response.data, HttpHeaderParser.parseCharset(response.headers)); 
      return Response.success(
        gson.fromJson(json, clazz), HttpHeaderParser.parseCacheHeaders(response)); 

     } catch (UnsupportedEncodingException e) { 
      return Response.error(new ParseError(e)); 
     } catch (JsonSyntaxException e) { 
      return Response.error(new ParseError(e)); 
     } 
    } 
} 

मान लें कि आप जो व्यक्ति की एक JSON सारणी रिटर्न http://example.com/api/persons/ में स्थित एक सर्वर विधि है;

public class Person { 
    String firstName; 
    String lastName; 
} 

हम इस तरह उपरोक्त विधि कॉल कर सकते हैं::

GsonRequest<Person[]> getPersons = 
     new GsonRequest<Person[]>("http://example.com/api/persons/", Person[].class, 

      new Listener<Person[]>() { 
       @Override 
       public void onResponse(Person[] response) { 
        List<Person> persons = Arrays.asList(response); 
        // TODO deal with persons 
       } 

      }, new ErrorListener() { 
       @Override 
       public void onErrorResponse(VolleyError error) { 
        // TODO deal with error 
       } 
      }); 

VolleyQueue.get().add(getPersons); 

और अंत में प्रतिक्रिया श्रोता में हम व्यक्ति की एक सरणी जो सूची में बदला जा सकता है और खिलाया ListView के एडाप्टर के लिए प्राप्त व्यक्ति इस प्रकार है ।

+1

से प्रतिक्रिया स्ट्रिंग पास करें अंतिम कोड स्निपेट कहां जाता है? और वॉलीक्यूयू कहां परिभाषित किया गया है? – Greg

+0

क्या हम यहां टोकन विधि का उपयोग कर सकते हैं? –

+0

अच्छा नमूना। मदद की। –

0

gson का उपयोग कर आप देशी JSONParsor में उपयोग कर सकते हैं का एक नमूना लिंक है एंड्रॉइड फ्रेमवर्क आपकी आवश्यकताओं अपेक्षाकृत कम है और JSONसरल है। Here ट्यूटोरियल के लिए एक लिंक है।

लेकिन अगर आप जटिलJSON वस्तुओं का उपयोग कर रहे,

  • तरह पुस्तकालयों का उपयोग GSON
  • जैक्सन

मैं GSON आसान और अधिक उपयोग करने के लिए प्रभावी लगता है । आप Here

+0

धन्यवाद, मैं संभवतः जीएसओएन का उपयोग करूंगा। क्या आप वास्तव में एक ऐरे को पार्स करने के बारे में विस्तार से बता सकते हैं? आपके द्वारा संदर्भित उदाहरण AsyncTask का उपयोग करता है, वॉली नहीं, इसलिए यह थोड़ा उलझन में है। मैंने पाया है कि JSONObject को पार्स करने पर बहुत से संसाधन हैं, लेकिन एक ऐरे के लिए उतने ही नहीं हैं, जिनके साथ मैं काम कर रहा हूं। – settheline

+0

'वॉली' से 'gson' – SathMK

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