2016-10-13 2 views
-1

Недавно я попытался закодировать список linkman. Я хочу получить файл локальных данных (City.json) и разбор по listView. Однако данные от JsonObject всегда равны нулю. Помоги мне, пожалуйста. Я новичок. Заранее спасибо. код под:Разбор данных Android Json - '' [] '', сбой анализа данных

City.json

{ 
// "state": 1, 
    "datas": [ 
     { 
      "id": "820", 
      "name": "安阳", 
      "sortKey": "A" 
     }, 
     { 
      "id": "68", 
      "name": "安庆", 
      "sortKey": "A" 
     }, 
     { 
      "id": "1269", 
      "name": "鞍山", 
      "sortKey": "A" 
     }, 
     { 
      "id": "22", 
      "name": "蚌埠", 
      "sortKey": "B" 
     }, 
     { 
      "id": "1372", 
      "name": "包头", 
      "sortKey": "B" 
     }, 
     { 
      "id": "2419", 
      "name": "北京", 
      "sortKey": "B" 
     }, 
     { 
      "id": "649", 
      "name": "保定", 
      "sortKey": "B" 
     }, 
     { 
      "id": "1492", 
      "name": "宝鸡", 
      "sortKey": "B" 
     }, 
     { 
      "id": "2419", 
      "name": "北京", 
      "sortKey": "B" 
     }, 
     { 
      "id": "649", 
      "name": "保定", 
      "sortKey": "B" 
     }, 
     { 
      "id": "1492", 
      "name": "宝鸡", 
      "sortKey": "B" 
     }, 
     { 
      "id": "2419", 
      "name": "北京", 
      "sortKey": "B" 
     }, 
     { 
      "id": "649", 
      "name": "保定", 
      "sortKey": "B" 
     }, 
     { 
      "id": "1492", 
      "name": "宝鸡", 
      "sortKey": "B" 
     }, 
     { 
      "id": "2419", 
      "name": "北京", 
      "sortKey": "B" 
     }, 
     { 
      "id": "649", 
      "name": "保定", 
      "sortKey": "B" 
     }, 
     { 
      "id": "1492", 
      "name": "宝鸡", 
      "sortKey": "B" 
     } 
    ] 

} 

AppFileReader.java

package me.sitinglin.administrator.wecharlinkmantest; 

import android.content.Context; 
import android.content.res.AssetManager; 
import android.util.Log; 

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.util.ArrayList; 
import java.util.List; 
import org.json.JSONArray; 
import org.json.JSONException; 
import org.json.JSONObject; 
import org.json.JSONTokener; 

/** 
* Created by Administrator on 2016/10/12. 
*/ 

public class AppJsonFileReader { 

    public static String getJson(Context context, String fileName){ 
     StringBuilder builder = new StringBuilder(); 
     AssetManager manager = context.getAssets(); 
     try { 
      InputStream stream = manager.open(fileName); 
      BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(stream)); 
      String line = null; 
      while((line = bufferedReader.readLine())!=null){ 
       builder.append(line); 
      } 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
//  Log.i("abc", builder.toString()); 
     return builder.toString(); 
    } 
    public static List<City> setData(String str){ 
     List<City> list = new ArrayList<>(); 
     City city ; 
     try { 
      JSONObject result = new JSONObject(str); 
      JSONArray array = result.getJSONArray("datas"); 
//   JSONArray array =new JSONArray(result); 

      int len = array.length(); 
      Log.i("len", array.toString()); 
      for (int i = 0; i <len ; i++) { 
       JSONObject object = array.optJSONObject(i); 
       city = new City(); 
       city.setId(object.optString("id")); 
       city.setName(object.optString("name")); 
       city.setSortKey(object.optString("sortKey")); 
       list.add(city); 
      } 
     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 
     Log.i("lll", list.toString()); 
     return list; 
    } 
} 

это мой контекст LogCat

enter image description here

+0

Возможно, это будет исключение. распечатать журнал внутри catch 'Log.i (« Ошибка », e.toString());' и посмотреть, какая ошибка вы получаете. а также проверить значение 'len' –

+0

Думает. Я понял! – Stellina

ответ

0

Вы должны пойти с помощью следующего кода:

JSONObject jobj = new JSONObject(str); 

if(jobj.has("datas")){  
    JSONArray jsonArray = jobj.getJSONArray("datas"); 
    List<City> list = new ArrayList<>(); 

    for (int i = 0; i < jsonArray.length(); i++) { 
     JSONObject jdataObj = jsonArray.getJSONObject(i);  
     City city = new City(); 
     city.setId(jdataObj.getString("id")); 
     city.setName(jdataObj.getString("name")); 
     city.setSortKey(jdataObj.getString("sortKey")); 
     list.add(city); 
    } 
} else { 
    Log.e("Json","Json has no datas key.") 
} 

Надеется, что это поможет.

+0

Думает! Я исправил эту проблему – Stellina

+0

@sitinglin: Ваш прием :-) – KishuDroid

1

Попробуйте это:

try { 
    JSONObject result = new JSONObject(str); 

    JSONArray jsonArray = result.getJSONArray("datas"); 

    for (int i = 0; i < jsonArray.length(); i++) { 

     JSONObject jsonObject2 = jsonArray.getJSONObject(i); 
     city = new City(); 
     city.setId(object.optString("id")); 
     city.setName(object.optString("name")); 
     city.setSortKey(object.optString("sortKey")); 
     list.add(city); 
    } 
} catch (JSONException e) { 
    e.printStackTrace(); 
} 
Log.i("lll", list.toString()); 
return list; 
0

Я нашел 3 решение этой проблемы. Я перечислю 3 вещи, которые я решил ниже, и один из 3-х решений может вам помочь. Есть три точки, которые могут помочь одной из трех точек: U1. проверка имени [локального файла] JSON; 2. проверка variale является «общедоступной» или «частной» ..; 3. Отметьте какой-то метод Json, правильно ли вы uesing? Aha ...