Essayer d'envoyer des informations au format JSON à l'aide de Retrofit, mais cela entre dans la méthode onFailure
de Retrofit et lève l'erreur suivante:
com.google.gson.stream.MalformedJsonException: Use JsonReader.setLenient(true) to accept malformed JSON at line 1 column 1 path $
Jusqu'ici, j'ai essayé de le résoudre en utilisant les réponses des liens suivants: 1) MalformedJsonException with Retrofit API? 2) Utilisez JsonReader.setLenient (true) pour accepter les fichiers JSON malformés à la ligne 1, colonne 1, chemin $
Voici mon code:
Interface de mise à niveau:
public interface ServerApi {
@POST("/register/test")
Call<User> createAccount(@Body User user);
}
MainActivity avec des trucs de connexion:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
User user= new User("[email protected]","vercode100");
sendNetworkRequest(user);
}
private void sendNetworkRequest(User user){
//create Retrofit instance
Retrofit.Builder builder= new Retrofit.Builder()
.baseUrl("http://localhost:8080")
.addConverterFactory(GsonConverterFactory.create());
Retrofit retrofit= builder.build();
//Get client and call object for the request
ServerApi client= retrofit.create(ServerApi.class);
Call<User> call= client.createAccount(user);
call.enqueue(new Callback<User>() {
@Override
public void onResponse(Call<User> call, Response<User> response) {
}
@Override
public void onFailure(Call<User> call, Throwable t) {
}
});
}
}
Classe d'utilisateur:
public class User {
private String email;
private String verificationCode;
public User(String email, String verificationCode) {
this.email = email;
this.verificationCode = verificationCode;
}
}
Le serveur attend JSON comme ceci:
{
"email" : "user.email",
"verificationCode" : "123456"
}
Je sais qu'il y a des questions courantes dans stackoverflow, mais aucune d'entre elles ne résout complètement mon problème.
L'exception n'est pas levée lors de l'envoi de vos données, mais elle est levée lorsque gson tente d'analyser la réponse du serveur. Selon votre code, vous vous attendez à ce que le serveur réponde avec un objet User mais vous envoyez également un objet User.
Votre serveur répond-il avec ce qui suit? Parce que c’est ce que vous dites de moderniser avec Call<User> createAccount(@Body User user)
{ "email": "user.email", "verificationCode": "123456"}
GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.setLenient();
Gson gson = gsonBuilder.create();
// and in you adapter set this instance
GsonConverterFactory.create(gson)