2016-07-02 73 views
1

需要幫助JSON解析爲列表視圖與多個對象Android

我有Json通過我必須檢索對象,但無法檢索。 我已經使用多個對象也檢索,但沒有成功。 JSON:

{ 
    "status": 1, 
    "data": [{ 
     "restaurent_id": "1", 
     "user_id": "6", 
     "zone_id": "1", 
     "restaurentAddress": { 
      "restaurent_address_id": "1" 
     }, 
     "restaurentInfo": { 
      "restaurent_info_id": "1", 
      "restaurent_bussiness_owner_name": "Vijay" 
     }, 
     "restaurentSetting": { 
      "restaurent_setting_id": "1", 
      "minimum_purcase": "200", 
      "payment_method_id": "1", 
      "title": "Best Hotel" 
     }, 
     "zone": { 
      "zone_id": "1", 
      "by_zipcode": "1" 
     } 

    }] 
} 

,我想取restaurentAddress和restaurentInfo

MY mainActivity.java文件

package com.example.premi.jsonlist; 
import android.app.Activity; 
import android.os.Bundle; 
import android.widget.TextView; 

import org.json.JSONArray; 
import org.json.JSONException; 
import org.json.JSONObject; 

public class MainActivity extends Activity { 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     TextView output = (TextView) findViewById(R.id.textView1); 
     String strJson="{\n" + 
       "\t\"status\": 1,\n" + 
       "\t\"data\": [{\n" + 
       "\t\t\"restaurent_id\": \"1\",\n" + 
       "\t\t\"user_id\": \"6\",\n" + 
       "\t\t\"zone_id\": \"1\",\n" + 
       "\t\t\"restaurentAddress\": {\n" + 
       "\t\t\t\"restaurent_address_id\": \"1\"\n" + 
       "\t\t},\n" + 
       "\t\t\"restaurentInfo\": {\n" + 
       "\t\t\t\"restaurent_info_id\": \"1\",\n" + 
       "\t\t\t\"restaurent_bussiness_owner_name\": \"Vijay\"\n" + 
       "\t\t},\n" + 
       "\t\t\"restaurentSetting\": {\n" + 
       "\t\t\t\"restaurent_setting_id\": \"1\",\n" + 
       "\t\t\t\"minimum_purcase\": \"200\",\n" + 
       "\t\t\t\"payment_method_id\": \"1\",\n" + 
       "\t\t\t\"title\": \"Best Hotel\"\n" + 
       "\t\t},\n" + 
       "\t\t\"zone\": {\n" + 
       "\t\t\t\"zone_id\": \"1\",\n" + 
       "\t\t\t\"by_zipcode\": \"1\"\n" + 
       "\t\t}\n" + 
       "\n" + 
       "\t}]\n" + 
       "}"; 
     String dataoutput = ""; 
     try { 
      JSONObject jsonRootObject = new JSONObject(strJson); 

      //Get the instance of JSONArray that contains JSONObjects 
      JSONObject status = jsonRootObject.optJSONObject("status"); 
      JSONArray Dataarray =status.getJSONArray("data"); 

      //Iterate the jsonArray and print the info of JSONObjects 
      for(int i=0; i < Dataarray.length(); i++){ 
       JSONObject jsonObject = Dataarray.getJSONObject(i); 
JSONObject Data = jsonObject.getJSONObject("restaurentAddress"); 

       for(int j = 0 ; j < Data.length(); j++){ 
        JSONObject GetData =Data.getJSONObject(String.valueOf(j)); 
       int id = Integer.parseInt(GetData.getString("restaurent_address_id")); 
       String postcode = GetData.getString("postcode"); 
       String addresss = GetData.getString("restaurent_address"); 


       dataoutput += " : \n id= "+ id +" \n postcode= "+ postcode +" \n address= "+ addresss +" \n "; 
      }} 
      output.setText(dataoutput); 
     } catch (JSONException e) {e.printStackTrace();} 
    } 
} 
+3

什麼問題?任何堆棧跟蹤? –

+0

07-03 03/54:08.988 2987-2987/com.example.premi.jsonlist E/dalvikvm:找不到類「android.os.PersistableBundle」,從方法com.example.premi.jsonlist.MainActivity.access $ super –

回答

2

嘗試了這一點:

try { 
    JSONObject object = (JSONObject) new JSONTokener(YOUR_JSON_STRING).nextValue(); 
    String restaurentAddressId = object.getJSONArray("data").getJSONObject(0).getJSONObject("restaurentAddress").getString("restaurent_address_id"); 
    String restaurentInfoId = object.getJSONArray("data").getJSONObject(1).getJSONObject("restaurentInfo").getString("restaurent_info_id"); 
    String restaurentBizOwnerName = object.getJSONArray("data").getJSONObject(1).getJSONObject("restaurentInfo").getString("restaurent_business_owner_name"); 

} 
catch (JSONException e) { 
} 
+0

07-03 04:09:21.584 30798-30798/com.example.premi.jsonlist E/Trace:打開跟蹤文件時出錯:沒有這樣的文件或目錄(2) 07-03 04:09:21.616 30798- 30798/com.example.premi.jsonlist E/dalvikvm:找不到類「android.util.ArrayMap」,從方法com.android.tools.fd.runtime.MonkeyPatcher.monkeyPatchExistingResources引用 –

+0

似乎你正在嘗試使用來自API級別的方法,用於ArrayMap的API 19,您正在測試它的設備不支持該方法。我不熟悉這個問題,但檢查出http://stackoverflow.com/questions/36812913/dalvikvm-could-not-find-class-android和http://stackoverflow.com/questions/36930200/could-not -find-class-android-app-applicationonprovideassistdatalistener –

+0

我需要一個更多的幫助,如果我在本地壓縮JSON,它正在工作,當即時通訊使用API​​(URL)時,它給出的錯誤顯示爲空白......原因是什麼?是他們的任何方式來首先存儲本地JSON然後檢索? –

1

對其做這個我試過

try { 
     JSONObject jsonRootObject = new JSONObject(strJson); 

     //Get the instance of JSONArray that contains JSONObjects 
     JSONArray mainnode =jsonRootObject.getJSONArray("data"); 

     //Iterate the jsonArray and print the info of JSONObjects 
     for(int i=0; i < mainnode.length(); i++){ 
      JSONObject jsonObject = mainnode.getJSONObject(i); 
      JSONObject Data = jsonObject.getJSONObject("restaurentInfo"); 
       int id = Integer.parseInt(Data.getString("restaurent_info_id")); 
       String postcode = Data.getString("restaurent_phone_number"); 
       String addresss = Data.getString("restaurent_bussiness_owner_name"); 


       dataoutput += " : \n restaurent_id= "+ id +" \n restaurent_info_id= "+ postcode +" \n restaurent_address_id= "+ addresss +" \n "; 

     } 
     output.setText(dataoutput); 
    } catch (JSONException e) {e.printStackTrace();} 
} 

我只是刪除狀態對象

,另一個用於循環感謝您的幫助得到了你有點幫助:)

+0

沒問題,很高興你明白了! :) –