2013-03-26 86 views
-1

在我的android应用程序中,我必须使用来自服务器的JSON来在应用程序中进行特定的调整。 我试图实现是读取此json并将所有值存储到本地变量中以执行应用程序内的操作。解析JSON到cofigure android应用程序

JSON从服务器:

[ 

    { 
     "sett": " ", 
     "glHdr": { 
      "sm": [ ], 
      "scleHPad": false, 
      "st": "sbsm" 
     }, 
     "colrBG": [ 
      23, 
      105, 
      184, 
      100 
     ], 
     "colrTB": [ 
      0, 
      0, 
      0, 
      0 
     ], 
     "colrTR": [ 
      255, 
      255, 
      255, 
      100 
     ], 
     "glFtr": { 
      "icoSz": "icoSzN", 
      "sm": [ ], 
      "scleHPad": false, 
      "gvNR": 3, 
      "gvHIT": false, 
      "gvNC": 3, 
      "st": "igsm" 
     }, 
     "statBr": true 
    }, 
    { 
     "sm": [ 
      { 
       "tbico": "b43-jeep.png", 
       "t": "Welcome!", 
       "w": "http://google.com/start", 
       "st": "w", 
       "wTBL": "wTBLN" 
      }, 
      { 
       "t": "Content screen title", 
       "f": "Eltec%20Spec%20sheet%20Gim%20RD30W.pdf", 
       "st": "f" 
      }, 
      { 
       "tbico": "109-chicken.png", 
       "t": "Sub menu", 
       "sm": [ 
        { 
         "t": "Screen 1", 
         "st": "f" 
        }, 
        { 
         "t": "Screen 2", 
         "w": "Http://google.com", 
         "st": "w", 
         "wTBL": "wTBLT" 
        } 
       ], 
       "st": "sm" 
      }, 
      { 
       "st": "f" 
      } 
     ], 
     "st": "tbm" 
    } 

] 

解析这个我已经创建了解析JSON类,并试图想出方法来读取,这JSON在我的应用程序商店的价值。

功能来做到这一点:

public void doScanAppConfigJson(){ 

private static final String = TAG_TITLE; 
private static final String = TAG_WEB_ADDRESS; 
private static final String = TAG_SCREEN_TYPE; 
private static final String = TAG_FILENAME; 


     JSONArray appConfig = null; 

     // Function for looping json object via ParseJson class. 
     //Creating JSON Parser instance 
     JSONParser jParser = new JSONParser(); 

     //Getting json strings from url 
     JSONObject jsonObject = jParser.getJSONFromUrl(url); 

    try{ 
     //Getting array of settings 
     appConfig = jsonObject.getJSONArray(ConfigConstants.TABLE_VIEW_SUB_MENU_CONFIG); 
     //loop throw all the objects under -sm[] 
     for (int i = 0; i < appConfig.length(); i++){ 

      JSONObject sm = appConfig.getJSONObject(i); 

      //Now store each of this json in local constant var. 

      String tabTitle = sm.getString(TAG_TITLE); 

      String webAddress = sm.getString(TAG_WEB_ADDRESS); 

      String screenType = sm.getString(TAG_SCREEN_TYPE); 

      String fileName = sm.getString(TAG_FILENAME); 

     } 

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

    } 

    } 

getJSONFromUrl方法:

public JSONObject getJSONFromUrl(String url) { 

     //Global authentication for link username and password. 
     Authenticator.setDefault(new Authenticator() { 
      protected PasswordAuthentication getPasswordAuthentication(){ 

      return new PasswordAuthentication("username", "password".toCharArray()); 
      } 

     }); 

     // Making HTTP request 
     try { 
      // defaultHttpClient 
      DefaultHttpClient httpClient = new DefaultHttpClient(); 
      HttpPost httpPost = new HttpPost(url); 

      HttpResponse httpResponse = httpClient.execute(httpPost); 
      HttpEntity httpEntity = httpResponse.getEntity(); 
      is = httpEntity.getContent();   

     } catch (UnsupportedEncodingException e) { 
      e.printStackTrace(); 
     } catch (ClientProtocolException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

     try { 
      BufferedReader reader = new BufferedReader(new InputStreamReader(
        is, "iso-8859-1"), 8); 
      StringBuilder sb = new StringBuilder(); 
      String line = null; 
      while ((line = reader.readLine()) != null) { 
       sb.append(line + "\n"); 
      } 
      is.close(); 
      json = sb.toString(); 
     } catch (Exception e) { 
      Log.e("Buffer Error", "Error converting result " + e.toString()); 
     } 

     // try parse the string to a JSON object 
     try { 
      jObj = new JSONObject(json); 
     } catch (JSONException e) { 
      Log.e("JSON Parser", "Error parsing data " + e.toString()); 
     } 

     // return JSON String 
     return jObj; 

    } 

并即时得到错误:settingsjava.lang.NullPointException在这一点,但我有定义瓦尔,请一些人告诉我怎么做我上面分析JSON。我在正确的轨道上实现答案。我的问题?

+2

你必须张贴的错误,否则我们帮不了你。 – 2013-03-26 03:54:33

+0

http://codeworkx.de/wordpress/wp-content/uploads/2011/12/jacoj.jpg – 2013-03-26 03:58:08

+0

plz看看更新的问题 – star18bit 2013-03-26 04:05:22

回答

3

电流JSON字符串格式为:

[ //<<<< JSONArray 

    { //<<<< JSONObject 
     // other items here... 
    } 

] 

此JSON字符串内容JSONArray作为根元素代替JSONObject。你需要将其转换第一JSONArray然后从中提取的JSONObject:

JSONArray jsonObject = jParser.getJSONFromUrl(url); 

也改变getJSONFromUrl方法的返回类型为JSONArray

+0

谢谢:),所以你说转换JSON到JSONArray?任何想法如何? – star18bit 2013-03-26 04:27:32

+0

@Dixit:是的,我有很多的想法,只是发布getJSONFromUrl方法代码的问题,然后我会编辑它 – 2013-03-26 04:29:32

+0

@Dixit:你有像'JSONJSONObject jsonObject = new JSONObject(response);'在getJSONFromUrl方法?然后将其更改为'JSONArray jsonObject = new JSONArray(response);' – 2013-03-26 04:31:15