web-dev-qa-db-fra.com

MalformedJsonException: utilisez JsonReader.setLenient (true) pour accepter les fichiers JSON mal formés au niveau de la ligne 1, colonne 1, chemin

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.

3
abrutsze

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"}

1
Mars
GsonBuilder gsonBuilder = new GsonBuilder();  
gsonBuilder.setLenient();  
Gson gson = gsonBuilder.create(); 

// and in you adapter set this instance
GsonConverterFactory.create(gson)
1
Florescu Cătălin