将JSON解析为cofigure android应用程序

在我的Android应用程序中,我必须使用服务器中的JSON在应用程序中进行特定调整。 我试图实现的是读取这个json并将所有值存储到局部变量中以在应用程序内执行操作。

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" } ] 

解析这个我已经创建了Parse JSON类,并尝试在我的应用程序中提出读取和存储此json值的方法。

执行此操作的function:

 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之上。 我是在正确的轨道上实现ans。 我的问题?

当前的json字符串格式为:

 [ //<<<< JSONArray { //<<<< JSONObject // other items here... } ] 

这个Json字符串将JSONArray作为根元素而不是JSONObject 。 你需要首先转换它JSONArray然后从中提取JSONObject:

 JSONArray jsonObject = jParser.getJSONFromUrl(url); 

还将getJSONFromUrl方法的返回类型更改为JSONArray