2017-08-27 95 views
0

如果我發送身份證,密碼到服務器,它必須給我一個json但它給我一個錯誤。翻新gson異常

com.google.gson.JsonSyntaxException:java.lang.IllegalStateException:預期BEGIN_OBJECT但BEGIN_ARRAY位於第1行第2列路徑

這是改造代碼

public void postCheckUser(String id, String password) { 
    retrofit = new Retrofit.Builder() 
      .addConverterFactory(GsonConverterFactory.create()) 
      .baseUrl(url) 
      .build(); 

    Map map = new HashMap(); 
    map.put("id",id); 
    map.put("password", password); 

    webService = retrofit.create(WebService.class); 
    Call<PastMemo> call = webService.getPastMain(map); 
    call.enqueue(new Callback<PastMemo>() { 
     @Override 
     public void onResponse(Call<PastMemo> call, Response<PastMemo> response) { 
      if (response.code() == 200) { 
       title = response.body().getTitle(); 
       letter= response.body().getLetter(); 
       date = response.body().getDate(); 
       Toast.makeText(getActivity(), "SignIn Success", Toast.LENGTH_SHORT).show(); 
      } else { 
       Toast.makeText(getActivity(), "SignIn Failed", Toast.LENGTH_SHORT).show(); 
      } 
     } 

     @Override 
     public void onFailure(Call<PastMemo> call, Throwable t) { 
      Toast.makeText(getActivity(), "SignIn Denied", Toast.LENGTH_SHORT).show(); 
     } 
    }); 
} 

這是WebService代碼

public interface WebService { 

    @FormUrlEncoded 
    @POST("PastMain") 
    Call<PastMemo> getPastMain(
      @FieldMap Map<String, String> user 
    ); 
} 

這是PastMemo代碼

public class PastMemo { 

@SerializedName("title") 
@Expose 
private String title; 
@SerializedName("letter") 
@Expose 
private String letter; 
@SerializedName("date") 
@Expose 
private String date; 

public String getTitle() { 
    return title; 
} 

public String getLetter() { 
    return letter; 
} 

public String getDate() { 
    return date; 
} 
} 

編輯: 這裏面我有JSON獲得

[ 
    { 
     "title": null, 
     "letter": null, 
     "date": null 
    }, 
    { 
     "title": "a", 
     "letter": "b", 
     "date": "c" 
    } 
] 
+0

請將該行發出相同的異常 – Mandy8055

+0

我調試了所有行以檢查錯誤行,但不顯示。它只會去onFailure()方法。 – dogyhbin2

回答

0

例外: com.google.gson.JsonSyntaxException:JAVA。 lang.IllegalStateException:期望BEGIN_OBJECT,但是BEGIN_ARRAY在第1行第2列路徑

在反序列化時發生,Gson期待JSON對象,但找到了一個JSON數組。由於它不能從一個轉換到另一個,它拋出了這個異常。 轉寄此:GSON throwing "Expected BEGIN_OBJECT but was BEGIN_ARRAY"?

試試這個:

@FormUrlEncoded 
    @POST("PastMain") 
    Call<List<PastMemo>> getPastMain(
      @FieldMap Map<String, String> user 
    ); 

改造代碼:

Call<List<PastMemo>> call = webService.getPastMain(map); 
call.enqueue(new Callback<List<PastMemo>>() { 
    @Override 
    public void onResponse(Call<List<PastMemo>> call, Response<List<PastMemo>> response) { 

    List<PastMemo> ls = response.body(); 
    //your implementation here 
    } 

    @Override 
    public void onFailure(Call<PastMemo> call, Throwable t) { 
     Toast.makeText(getActivity(), "SignIn Denied", Toast.LENGTH_SHORT).show(); 
    } 
}); 
+0

那麼我該怎麼做才能解決這個問題?我正在尋找解決方案。不管怎樣,謝謝你。 – dogyhbin2

+0

這不是答案。它必須是註釋 – Mandy8055

+0

謝謝。也許更多的谷歌搜索將幫助我解決這個問題 – dogyhbin2

0

。在你的POJO類錯誤,請您分享更多詳情響應和POJO類。

+0

添加回復json和POJO – dogyhbin2

+0

列表 list = response.body(); title = list.get(0).getTitle();等等...... –

+0

沒有更多的POJO類相關。 – dogyhbin2