wake-up-neo.com

MalformedJsonException: Verwenden Sie JsonReader.setLenient (true), um fehlerhaftes JSON in Zeile 1-Spalte 1-Pfad zu akzeptieren

Der Versuch, Informationen im JSON-Format mit Retrofit zu senden, tritt jedoch in die onFailure-Methode von Retrofit ein und gibt den folgenden Fehler aus:

com.google.gson.stream.MalformedJsonException: Use JsonReader.setLenient(true) to accept malformed JSON at line 1 column 1 path $

Bisher habe ich versucht, es mithilfe der Antworten aus den folgenden Links zu lösen: 1) MalformedJsonException mit Retrofit-API? 2) Verwenden Sie JsonReader.setLenient (true), um fehlerhaftes JSON in Zeile 1 Spalte 1 Pfad $ zu akzeptieren.

Hier ist mein Code:

Retrofit-Schnittstelle:

public interface ServerApi {
    @POST("/register/test")
    Call<User> createAccount(@Body User user);
}

MainActivity mit Verbindungsmaterial:

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

    }
}

Benutzerklasse:

public class User {
    private String email;
    private String verificationCode;

    public User(String email, String verificationCode) {
        this.email = email;
        this.verificationCode = verificationCode;
    }

}

Der Server erwartet JSON wie folgt:

{
    "email" : "user.email",
    "verificationCode" : "123456"
}

Ich weiß, dass Stackoverflow einige häufige Fragen enthält, aber keine dieser Fragen löst mein Problem vollständig.

3
abrutsze

Die Ausnahme wird beim Senden Ihrer Daten nicht ausgelöst, aber es wird ausgelöst, wenn Gson versucht, die Serverantwort zu analysieren. Gemäß Ihrem Code erwarten Sie, dass der Server mit einem User -Objekt antwortet, Sie senden jedoch auch ein User-Objekt.

Reagiert Ihr Server mit den folgenden Angaben? Weil es das ist, was Sie mit Call<User> createAccount(@Body User user) nachrüsten

{ "email": "user.email", "prüfungscode": "123456"}

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

// and in you adapter set this instance
GsonConverterFactory.create(gson)
1