2016-07-25 72 views
3

我想在android应用程序中显示json数据,但我有困难,我认为可能与json文件的格式化方式有关.i想要获取标题数组中的名称和代码的值。而且它不工作在android中显示单个数组json数据?

这是JSON文件

{ 
"status": "SUCCESS", 
"headers": 
{ 
"id": "4", 
"name": "GLO", 
"code": "GLO", 
"background_color_code": "15B709", 
"text_color_code": "ffffff", 
"statusMessage": "Hi +234805, an ACCESS FEE of N20.00 will be charged in order to access this Platform" 
}, 
"statusMessage": "Movies Loaded successfully", 
"caption": "Discover" 
} 

这是Java代码

protected ArrayList<HashMap<String, String>> doInBackground(Void... arg0) { 

      ArrayList<HashMap<String, String>> categoryList = new ArrayList<HashMap<String, String>>(); 
      jParser = new JSONParser(); 

      JSONObject json = jParser.getJSONFromUrl(URL_CATEGORY); 

      try { 
        JSONObject categories =json.getJSONObject("headers"); 

        String state = categories.getString("name"); 
        String status = categories.getString("code"); 

        HashMap<String, String> map = new HashMap<String, String>(); 
        map.put(TAG_PIC, state); 
        map.put(TAG_NOTE, status); 
        categoryList.add(map); 


      }catch (Throwable e){ 
       e.printStackTrace(); 
      } 
      return categoryList; 
     } 

这是错误

07-25 11:05:50.766 15683-15697/com.example.cann I/System.out﹕ close [socket][/10.187.206.124:36118] 
07-25 11:05:50.781 15683-15702/com.example.cann W/System.err﹕ org.json.JSONException: Value at headers of type java.lang.String cannot be converted to JSONObject 
07-25 11:05:50.782 15683-15702/com.example.cann W/System.err﹕ at org.json.JSON.typeMismatch(JSON.java:100) 
07-25 11:05:50.782 15683-15702/com.example.cann W/System.err﹕ at org.json.JSONObject.getJSONObject(JSONObject.java:613) 
07-25 11:05:50.782 15683-15702/com.example.cann W/System.err﹕ at com.example.cann.CategoryActivity$LoadComments.doInBackground(CategoryActivity.java:81) 
07-25 11:05:50.782 15683-15702/com.example.cann W/System.err﹕ at com.example.cann.CategoryActivity$LoadComments.doInBackground(CategoryActivity.java:60) 
+0

你能在getJSONFromUrl我得到的数据thod?尝试打印回应,并把它放在这里 – Vickyexpert

+0

你在这里得到什么'JSONObject json = jParser.getJSONFromUrl(URL_CATEGORY);' –

回答

0

试试这个

try { 
     JSONObject rootJsonObject = new JSONObject(response); 
     if (rootJsonObject.getString("status").equalsIgnoreCase("SUCCESS")) { 
      JSONObject headerJsonObject = new JSONObject(rootJsonObject.getString("headers")); 
      String name = headerJsonObject.getString("name"); 
      String code = headerJsonObject.getString("code"); 
     } 
    } catch (JSONException e) { 
     e.printStackTrace(); 
    } 
+0

哪里的响应可变来自 – arinze

+0

这是服务器响应字符串 – Dexto

+0

这就是我所得到的07 -25 12:10:49.206 28912-28926 /? W/System.err:org.json.JSONException:输入结束于字符0的 07-25 12:10:49.208 28912-28926 /? W/System.err:at org.json.JSONTokener.syntaxError(JSONTokener.java:449) – arinze

1

您可以

try { 
    JSONObject reader = new JSONObject(Your_URL); 
    JSONArray jsonArray = reader.getJSONArray("headers"); 

    for (int i = 0; i < jsonArray.length(); i++) { 
     JSONObject e = jsonArray.getJSONObject(i); 
     String name= e.getString("name"); 
    } 
} catch (JSONException e) { 
    e.printStackTrace(); 
} 
0

一下你的方法似乎太复杂,APPART,你的问题是你需要阅读headers属性读之前其他属性。

使用com.google.gson.GSon

protected static void read() throws Exception { 
    com.google.gson.Gson jParser = new com.google.gson.Gson(); 

    Reader r = new BufferedReader(new FileReader(new File(FILE_PATH))); 

    // get all the object 
    JsonObject json = jParser.fromJson(r, JsonObject.class); 

    // get headers object 
    JsonObject members = json.get("headers").getAsJsonObject(); 

    // get attributes inside headers! 
    System.out.println(members.get("id")); 
    System.out.println(members.get("name")); 
    System.out.println(members.get("statusMessage")); 
} 

OUTPUT:

"4" 
"GLO" 
"Hi +234805, an ACCESS FEE of N20.00 will be charged in order to access this Platform" 

Download here的jar文件


什么varable是FILE_PATH - 安霖泽枢机3分钟前

是我放在你把你的问题内容的文件,在我的情况的路径:

String FILE_PATH = "D:\\Users\\jordi\\datos.txt"; 

但是你必须把你的自己的路....无论如何,如果你需要从URL得到了Reader只是用这个例子:

URL url = new URL("http://your-json-url"); 
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); 
InputStream inputStream = new BufferedInputStream(urlConnection.getInputStream()); 
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream)); 
+0

看起来很完美。 –

+0

哪里是gson varable。我在哪里下载它 – arinze

+1

@arinze不需要GSON。请检查他的逻辑只是 –