(Используйте JsonReader.setLenient (true), чтобы принять искаженный JSON в строке 1, путь 1, столбец $) & (Ожидаемый BEGIN_OBJECT, но в строке 1, столбец 1, строка STRING) - PullRequest
0 голосов
/ 06 ноября 2019

Я хочу отправить форму на сервер с Retrofit, но я получил ошибку.

Используйте JsonReader.setLenient (true), чтобы принять искаженный JSON в строке 1, путь 1, столбец $.

Я пытался исправить это, как показано ниже:

Gson gson = new GsonBuilder()
        .setLenient()
        .create();

return new Retrofit.Builder()
        .baseUrl(AppConfig.BASE_URL)
        .addConverterFactory(GsonConverterFactory.create(gson))
        .build();

, тогда у меня есть эта ошибка:

Ожидается BEGIN_OBJECT, но в строке 1 путь 1 столбца 1 $

Myphp файл:

<?php

if($_SERVER['REQUEST_METHOD']=='POST') {

    $jenis = $_POST['jenis'];
    $tipe = $_POST['tipe'];
    $nominal = $_POST['nominal'];

    require_once("connect.php");

    $sql = "INSERT INTO keuangan (jenis, tipe, nominal) VALUES('$jenis','$tipe','$nominal')";

    if(mysqli_query($conn,$sql)) {

        $response["value"] = 1;
        $response["message"] = "Laporan Berhasil Ditambahkan";
        echo json_encode($response);
    } 
    else {

        $response["value"] = 0;
        $response["message"] = "ERROR! | Laporan Gagal Ditambahkan";
        echo json_encode($response);
    }

   mysqli_close($conn);
 }
 else {

  $response["value"] = 0;
  $response["message"] = "ERROR, OUT OF METHOD";
  echo json_encode($response);
 }

Мой интерфейс API:

public interface RegisterAPI {

    @FormUrlEncoded
    @POST("insert.php")
    Call<Value> daftar (
        @Field("jenis") String jenis,
        @Field("tipe") String tipe,
        @Field("nominal") String nominal
    );

}

Моя модель:

public class Value {

    String value;
    String message;

    public String getValue() {
        return value;
    }

    public void setValue(String value) {
        this.value = value;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }
}

Моя активность:

@OnClick(R.id.btn_Daftar) void daftar() {
        //membuat progress dialog
        progress = new ProgressDialog(this);
        progress.setCancelable(false);
        progress.setMessage("Loading ...");
        progress.show();

        //mengambil data dari edittext
        String jenis = et_jenis.getText().toString();
        String tipe = et_tipe.getText().toString();
        String nominal = et_nominal.getText().toString();

        int selectedId = radioGroup.getCheckedRadioButtonId();
        radioSexButton = (RadioButton) findViewById(selectedId);
        String sesi = radioSexButton.getText().toString();

//        ==FIRST ERROR==
//        Retrofit retrofit = new Retrofit().Builder()
//                .baseUrl(URL)
//                .addConverterFactory(GsonConverterFactory.create())
//                .build();

//        ==SECOND ERROR==
        Gson gson = new GsonBuilder()
                .setLenient()
                .create();

            retrofit = new Retrofit.Builder()
                    .baseUrl(URL)
                    .addConverterFactory(GsonConverterFactory.create(gson))
                    .build();

        RegisterAPI api = retrofit.create(RegisterAPI.class);
        Call<Value> call = api.daftar(jenis, tipe, nominal);
        call.enqueue(new Callback<Value>() {
            @Override
            public void onResponse(Call<Value> call, Response<Value> response) {
                String value = response.body().getValue();
                String message = response.body().getMessage();
                progress.dismiss();
                if (value.equals("1")) {
                    Toast.makeText(MainActivity.this, message, Toast.LENGTH_SHORT).show();
                } else {
                    Toast.makeText(MainActivity.this, message, Toast.LENGTH_SHORT).show();
                }
            }

            @Override
            public void onFailure(Call<Value> call, Throwable t) {
                progress.dismiss();
                String message = t.getLocalizedMessage();
                Toast.makeText(MainActivity.this, message, Toast.LENGTH_SHORT).show();
            }
        });

    }

Каждыйпредложение будет очень полезно. Спасибо

1 Ответ

0 голосов
/ 06 ноября 2019

Ожидается тип объекта Value, но в API-интерфейсе вызывается строка

@FormUrlEncoded
@POST("insert.php")
Call<Value> daftar (
    @Field("jenis") String jenis,
    @Field("tipe") String tipe,
    @Field("nominal") String nominal
);

Попробуйте вызвать daftar() с тем же значением из Почтальон и проверьте вывод.

...