2013-11-14 57 views
1

我试图解析包含JSON对象数组的字符串,但直到API 19(Kit-Kat)操作系统才支持org.json.JSONArray。出于显而易见的原因,我需要找出解决办法。有更好的选择吗?或者我错误地使用这种方法?Android中的JSONArray替代方案

这里是一个不断告诉我的代码,我需要API 19或更高:

protected void onPostExecute(JSONArray result) { 
     pDialog.dismiss(); 
     try { 
      // Getting JSON Array from URL 
      info = new JSONArray(result); 
      for(int i = 0; i < info.length(); i++){ 
       JSONObject c = info.getJSONObject(i); 

       // Storing JSON item in a Variable 
       String title = c.getString(TAG_TITLE); 
       String article = c.getString(TAG_ARTICLE); 
       String timestamp = c.getString(TAG_TIMESTAMP); 
       String datestring = c.getString(TAG_DATESTRING); 

       // Adding value HashMap key => value 
       HashMap<String, String> map = new HashMap<String, String>(); 
       map.put(TAG_TITLE, title); 
       map.put(TAG_ARTICLE, article); 
       map.put(TAG_TIMESTAMP, timestamp); 
       map.put(TAG_DATESTRING, datestring); 

       oslist.add(map); 
       list=(ListView)findViewById(R.id.list); 

       ListAdapter adapter = new SimpleAdapter(MainActivity.this, oslist, 
         R.layout.list_v, 
         new String[] { TAG_TITLE,TAG_ARTICLE, TAG_TIMESTAMP,TAG_DATESTRING }, new int[] { 
         R.id.title,R.id.article, R.id.timestamp,R.id.date_string}); 

       list.setAdapter(adapter); 
       list.setOnItemClickListener(new AdapterView.OnItemClickListener() { 

        @Override 
        public void onItemClick(AdapterView<?> parent, View view, 
          int position, long id) { 
         Toast.makeText(MainActivity.this, "You Clicked at "+oslist.get(+position).get("name"), Toast.LENGTH_SHORT).show(); 
        } 
       }); 
      } 
     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

顺便说一句,我使用的AsyncTask把信息变成一个ListView。我有另一个类来获取网页的结果。谢谢!

+0

是什么让你认为org.json .JSONArray仅在API 19中受支持? –

+0

@SteveBenett基本上是这么说的:['JSONArray'](http://developer.android.com/reference/org/json/JSONArray.html)自API级别1开始已经存在。 –

+0

Eclipse告诉我JSONArray是只支持在API 19 :( – user1064249

回答

4

您正在使用新的API 19功能:

info = new JSONArray(result); 

由于结果已经是JSONArray,wh你是否需要创造另一个?

+1

WOWOWOWOWOWOWOWOWOWOW !!!!!!!!!!!!!!你是对的,我没有理由从(已经是)JSONArray创建JSONArray!我是这样一个noob :)顺便说一句,它现在的作品 – user1064249

0

这是19API下的解决方案lvl:

首先。制作一个Gson对象。 - >Gson gson = new Gson();

第二步是StringRequest(而不是JsonObjectRequest)

的最后一步得到JsonArray让您jsonObj作为字符串...

YoursObjArray[] yoursObjArray = gson.fromJson(response, YoursObjArray[].class);