2015-02-01 3 views
1

ArrayList를 직렬화하여 앱을 닫고 다시 시작할 때 모든 Claim 속성과 함께 사용할 수 있도록하려고합니다. 제목과 같이 오류가 발생합니다. Expecterd begin_array하지만 대신 begin_object가 있습니다. 로그 캣 마지막으로 여기예상 BEGIN_ARRAY이지만 BEGIN_OBJECT Gson android serializable

ArrayList<Claim> claim; 
String SAVEFILE = "file.sav"; 

을하고있다 :

02-01 16:50:45.121: E/AndroidRuntime(4695): FATAL EXCEPTION: main 
02-01 16:50:45.121: E/AndroidRuntime(4695): Process: app.zioueche_travelexpense, PID: 4695 
02-01 16:50:45.121: E/AndroidRuntime(4695): java.lang.RuntimeException: Unable to start activity ComponentInfo{app.zioueche_travelexpense/app.zioueche_travelexpense.AddClaim}: com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2 path $ 
02-01 16:50:45.121: E/AndroidRuntime(4695):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2305) 
02-01 16:50:45.121: E/AndroidRuntime(4695):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2363) 
02-01 16:50:45.121: E/AndroidRuntime(4695):  at android.app.ActivityThread.access$900(ActivityThread.java:161) 
02-01 16:50:45.121: E/AndroidRuntime(4695):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1265) 
02-01 16:50:45.121: E/AndroidRuntime(4695):  at android.os.Handler.dispatchMessage(Handler.java:102) 
02-01 16:50:45.121: E/AndroidRuntime(4695):  at android.os.Looper.loop(Looper.java:157) 
02-01 16:50:45.121: E/AndroidRuntime(4695):  at android.app.ActivityThread.main(ActivityThread.java:5356) 
02-01 16:50:45.121: E/AndroidRuntime(4695):  at java.lang.reflect.Method.invokeNative(Native Method) 
02-01 16:50:45.121: E/AndroidRuntime(4695):  at java.lang.reflect.Method.invoke(Method.java:515) 
02-01 16:50:45.121: E/AndroidRuntime(4695):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265) 
02-01 16:50:45.121: E/AndroidRuntime(4695):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081) 
02-01 16:50:45.121: E/AndroidRuntime(4695):  at dalvik.system.NativeStart.main(Native Method) 
02-01 16:50:45.121: E/AndroidRuntime(4695): Caused by: com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2 path $ 
02-01 16:50:45.121: E/AndroidRuntime(4695):  at com.google.gson.Gson.fromJson(Gson.java:822) 
02-01 16:50:45.121: E/AndroidRuntime(4695):  at com.google.gson.Gson.fromJson(Gson.java:775) 
02-01 16:50:45.121: E/AndroidRuntime(4695):  at app.zioueche_travelexpense.AddClaim.loadFromFile(AddClaim.java:273) 
02-01 16:50:45.121: E/AndroidRuntime(4695):  at app.zioueche_travelexpense.AddClaim.onStart(AddClaim.java:239) 
02-01 16:50:45.121: E/AndroidRuntime(4695):  at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1189) 
02-01 16:50:45.121: E/AndroidRuntime(4695):  at android.app.Activity.performStart(Activity.java:5436) 
02-01 16:50:45.121: E/AndroidRuntime(4695):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2278) 
02-01 16:50:45.121: E/AndroidRuntime(4695):  ... 11 more 
02-01 16:50:45.121: E/AndroidRuntime(4695): Caused by: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2 path $ 
02-01 16:50:45.121: E/AndroidRuntime(4695):  at com.google.gson.stream.JsonReader.beginArray(JsonReader.java:350) 
02-01 16:50:45.121: E/AndroidRuntime(4695):  at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.read(CollectionTypeAdapterFactory.java:79) 
02-01 16:50:45.121: E/AndroidRuntime(4695):  at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.read(CollectionTypeAdapterFactory.java:60) 
02-01 16:50:45.121: E/AndroidRuntime(4695):  at com.google.gson.Gson.fromJson(Gson.java:810) 
+0

우리도 JSON을 볼 수 있다면 도움이 될 것입니다. – JamesB

+0

Json이 무슨 뜻인지 모르겠습니다. 나는 안드로이드를 처음 접했습니다. –

+0

파서는''('Array'의 시작 부분)''('Object'의 시작 부분)'{ '이 (가)'file.sav'의 1 행 2 열에서 발생했다고합니다. – minmaxavg

답변

0

당신은 이러한 기능을 사용할 수 있습니다 여기에

@Override 
protected void onStart(){ 
    super.onStart(); 
    claim = loadFromFile(); 
    Toast.makeText(this, "loading File"+claim.size(), Toast.LENGTH_SHORT).show(); 
    ClaimsList cl = new ClaimsList(); 
    cl.setClaimList(claim); 
    //ArrayAdapter<Claim> claimAdapter = new ArrayAdapter<Claim>(this, R.layout.custom_view_claim, claim); 
    //listView.setAdapter(claimAdapter); 
} 

public void saveInFile(Claim claim) { 
    Gson gson = new Gson(); 
    try { 
     FileOutputStream fos = openFileOutput(this.SAVEFILE,0); 
     OutputStreamWriter osw = new OutputStreamWriter(fos); 
     gson.toJson(claim, osw); 
     osw.flush(); 
     fos.close(); 
    } catch (FileNotFoundException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
} 

//recover those persistent data created in the save function 
private ArrayList<Claim> loadFromFile() { 
    Gson gson = new Gson(); 
    ArrayList<Claim> claim = new ArrayList<Claim>(); 
    try { 
     FileInputStream fis = openFileInput(SAVEFILE); 
     //Based on http://google.gson.googlecode.com/svn/trunk/gson/dos/javadoc/com/google/gson/Gson.html 
     Type listType = new TypeToken<ArrayList<Claim>>(){}.getType(); 
     InputStreamReader isr = new InputStreamReader(fis); 
     claim = gson.fromJson(isr, listType); 
     fis.close(); 

    } catch (FileNotFoundException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    if (claim == null){ 
     claim = new ArrayList<Claim>(); 
    } 
    return claim; 
} 

이 클래스 부가 요소이다 내가 가진 : 여기

내 코드입니다 : isJsonObject()isJsonArray()

예를 들어

:

 Gson gson = new Gson(); 
      JsonParser parser = new JsonParser(); 
      JsonElement jsonElement = parser.parse(productJSONStr); 



      if (jsonElement.isJsonArray()) { 
      } 
      else if (jsonElement.isJsonObject()) { 

      }else{ 

      } 

은 내가 당신을 도울 수 있기를 바랍니다.

관련 문제