2017-02-25 204 views
0

這裏是我讀取json文件的方法。無法讀取json文件

private void LoadTabaksFromJson() { 

    InputStream raw = mContext.getResources().openRawResource(R.raw.tabaks); 
    Reader reader = new BufferedReader(new InputStreamReader(raw)); 


    ListOfTabaks listOfTodos = new Gson().fromJson(reader, ListOfTabaks.class); 
    List<Tabak> todoList = listOfTodos.getTodoArrayList(); 

    for (Tabak item: todoList){ 
     mDataBase.insert(TabakTable.NAME,null,getContentValues(item)); 
    } 
} 


public class ListOfTabaks { 

    protected ArrayList<Tabak> tabakArrayList; 

    public ArrayList<Tabak> getTodoArrayList(){ 
     return tabakArrayList; 
    } 
} 

而且Exeption

所致:顯示java.lang.NullPointerException:嘗試一個空對象上調用接口 方法 'java.util.Iterator的java.util.List.iterator()' 參考 在 com.hookah.roma.hookahmix.TabakLab.LoadTabaksFromJson(TabakLab.java:61) 在com.hookah.roma.hookahmix.TabakLab。(TabakLab.java:32) 在com.hookah.roma。 hookahmix.TabakLab.get(TabakLab.java:37) 在 com.hookah.roma.hookahmix.TabakListFragment.updateUI(TabakListFragment.java:38) 在 com.hookah.roma.hookahmix.TabakListFragment.onCreateView(TabakListFragment.java:32) 在 android.support.v4 .app.Fragment.performCreateView(Fragment.java:2184) 在 android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1298) 在 android.support.v4.app.FragmentManagerImpl.moveFragmentsToInvisible(FragmentManager .java:2323) at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(Fragment Manager.java:2136)

和JSON文件:

{ 
    "tabaksArrayList":[ 
    { 
     "name":"Абрикос", 
     "description":"Со вкусом Абрикоса", 
     "rating":"4.1", 
     "favourite":"1", 
     "family":"Al fakher" 
    }, 
    { 
     "name":"Ананас", 
     "description":"Со вкусом Ананаса", 
     "rating":"4.1", 
     "favourite":"1", 
     "family":"Al fakher" 
    }, 
    { 
     "name":"Апельсин", 
     "description":"Со вкусом Апельсина", 
     "rating":"4.1", 
     "favourite":"1", 
     "family":"Al fakher" 
    }, 
    { 
     "name":"Апельсин с мятой", 
     "description":"Со вкусом Апельсина с мятой", 
     "rating":"4.1", 
     "favourite":"1", 
     "family":"Al fakher" 
    }, 
+0

,哪一個是第61行? – Prashant

+0

@Prashant可能與增強for循環的行 – Androbin

+0

61:for(Tabak item:todoList){ 我明白由於列表的異常是空的,但爲什麼? –

回答

0

它看起來像你的JSON模式的問題,我是猜測listOfTodos返回null。你可以參考this來生成你的模式。

但有時那工具可以使我們迷惑,所以我試圖手動創建您的模式是這樣的:

TabakRoot.java

public class TabakRoot { 

@SerializedName("tabaksArrayList") 
private List<TabakItem> tabakItem = null; 

public List<TabakItem> getTabakItem() { 
    return tabakItem; 
}} 

TabakItem。java的

public class TabakItem { 

@SerializedName("family") 
@Expose 
private String tabakFamily; 

public String getTabakFamily() { 
    return tabakFamily; 
}} 

終於

TabakRoot listOfTodos = new Gson().fromJson(reader, TabakRoot.class); 
List<TabakItem> todoList = listOfTodos.getTabakItem(); 
+0

非常感謝:3 –

+0

不客氣:) – Amigoz

0

請把你的JSON文件的資產文件夾

使用的AsyncTask從ANR保護像situtation

onBackground(){ 
    String json = null; 
    try { 
     InputStream stream = activity.getAssets().open("ur_json_file_in_assets_folder.json"); 
     int size = stream.available(); 
     byte[] buffer = new byte[size]; 
     stream.read(buffer); 
     stream.close(); 
     json = new String(buffer, "UTF-8"); 
    } catch (IOException e) { 
     e.printStackTrace(); 
     return null; 
    } 
    return json; 
} 

然後解析

onPostExecute(String str){ 
JsonObject object = new JsonObject(str); 
JsonArray arr = object.getJsonArray("tabaksArrayList"); 
...} 

ParseJsonFileAsync.java

0

更多的細節看起來你是不是你的初始化ArrayList中,嘗試改變:

protected ArrayList<Tabak> tabakArrayList; 

爲:

protected ArrayList<Tabak> tabakArrayList = new ArrayList<>(); 
0

你沒有初始化tabakArrayList,一個構造函數添加到您的ListOfTabaks如下

public ListOfTabaks{ 
    tabakArrayList = new ArrayList<>(); 
} 

,你應該罰款