2016-01-04 67 views
0

我在保存我的JSONArray時遇到了問題,這是我的遊戲所需要的。 我有2種方法:Android保存JSONArray

public void saveArr(Context c,JSONArray arr,String name){ 
    String fileName = name+"Arr.json"; 
    String data = ""; 
    if (arr != null) { 

     /* 
     Convert JSONArray to String 
     */ 
     data = arr.toString(); 
     /* 
     TODO PROBLEM data not compatible with JSONArray 
     */ 
    } 
    FileOutputStream fos; 

    try { 


     fos = c.openFileOutput(fileName, Context.MODE_PRIVATE); 
     fos.write(data.getBytes()); 
     fos.close(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

public JSONArray getArrJSON(Context c,String name){ 
    StringBuilder sb =null; 
    JSONObject obj=null ; 
    JSONArray arr = null; 
    try { 
     FileInputStream fis = c.openFileInput(name+"Arr.json"); 
     InputStreamReader isr = new InputStreamReader(fis); 
     BufferedReader bufferedReader = new BufferedReader(isr); 
     sb = new StringBuilder(); 
     String line; 
     while ((line = bufferedReader.readLine()) != null) { 
      sb.append(line); 
     } 

     //Here i get an Exception JSONException 
     obj= new JSONObject(sb.toString()); 
     arr = deck.getJSONArray("arr"); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    return arr; 
} 

的JSONArray看起來是這樣的:

[ 
{ 
    "pictures":[ 
     { 
     "key":"value" 
     } 
    ], 
    "name":"name", 
    "id":"id" 
}, 
{ 
    "pictures":[ 
     { 
      "key":"value" 
     } 
    ], 
    "name":"name", 
    "id":"id" 
} 
] 

我得到一個例外,我不能發表,因爲我的JSON文件是長... 但是是這條線上的JSONException:

`obj= new JSONObject(sb.toString());` 

的方法getArrJSON

我不知道我的錯誤begins.But我認爲一個錯誤IST是:

arr = deck.getJSONArray("arr"); 

但就像我之前說的例外是在上一行拋出。

回答

1

而不是

obj= new JSONObject(sb.toString()); 

嘗試

arr = new JSONArray(sb.toString()); 

,你寫入到磁盤中的第一個方法表示JSONArray,而不是一個JSONObject的字符串。

瞭解JSONObject和JSONArray之間的區別很重要。 JSONArray(通常)包含JSONObjects,並且JSONArray的字符串表示始終以'['開頭。

+1

好哇,看起來像工作,我跟着一個教程,他們說,這是不可能的:D謝謝你 – greedsin