2017-08-27 11 views
0

Si j'envoie un identifiant, mot de passe au serveur, il doit me donner un json mais cela me donne une erreur.Retrofit gson exception

com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: BEGIN_OBJECT attendu, mais était BEGIN_ARRAY à la ligne 1 colonne 2 chemin

C'est code Retrofit:

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(); 
     } 
    }); 
} 

Ceci est le Code de service Web:

public interface WebService { 

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

Ce code est 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; 
} 
} 

EDIT: Ce JSON que je dois obtenir

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

Veuillez signaler la ligne à laquelle elle lance la même exception – Mandy8055

+0

J'ai débogué toutes les lignes pour vérifier la ligne d'erreur mais elle n'apparaît pas. Il va seulement à la méthode onFailure(). – dogyhbin2

Répondre

0

L'exception: com.google.gson.JsonSyntaxException: java. lang.IllegalStateException: BEGIN_OBJECT attendu, mais BEGIN_ARRAY à la ligne 1, colonne 2, chemin.

se produit lors de la désérialisation, Gson attendait un objet JSON, mais a trouvé un tableau JSON. Comme il ne pouvait pas convertir de l'un à l'autre, il a jeté cette exception. Reportez-vous ceci: GSON throwing "Expected BEGIN_OBJECT but was BEGIN_ARRAY"?

Essayez ceci:

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

Code Rénovation:

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

Alors que dois-je faire pour résoudre ce problème ?? Je cherchais une solution. Merci quand même. – dogyhbin2

+0

Ce n'est pas la réponse. Ce doit être un commentaire – Mandy8055

+0

Merci. Peut-être un peu de googling va m'aider à résoudre ce problème – dogyhbin2

0

Il y a une erreur dans votre classe POJO, s'il vous plaît partager votre réponse et classe POJO pour plus de détails.

+0

a ajouté une réponse json et POJO – dogyhbin2

+0

Liste list = response.body(); title = list.get (0) .getTitle(); et ainsi de suite ... –

+0

Il n'y a plus de classe POJO liée. – dogyhbin2