Метод Retrofit GET возвращает HTTP Code 400, даже если сервис работает на Почтальоне - PullRequest
0 голосов
/ 24 декабря 2018

Я занимаюсь разработкой приложения, которое показывает значения JSON на Android.Я написал службу WCF, которая возвращает массив JSON.

Я попытался протестировать свой веб-сервис на Postman, и он вернул значения.Но я не мог получить какие-либо значения в приложении.Я отладил приложение и показал, что URL действителен, но все еще получает HTTP-код 400

Вот мой интерфейс

@GET("ClientControl.svc/GetRecords")
Call<List<Records>> records();

А вот мой модифицированный объект.

Retrofit retrofit = new Retrofit.Builder()
.baseUrl("http://192.168.2.134:62665/") // I tried it to change 10.0.3.2 but same
.addConverterFactory(GsonConverterFactory.create())
.build();

ивот мои телефонные коды

    JsonPlaceholderAPI jsonPlaceholderAPI = retrofit.create(JsonPlaceholderAPI.class);

    Call<List<Records>> call = jsonPlaceholderAPI.records();

    call.enqueue(new Callback<List<Records>>() {
        @Override
        public void onResponse(Call<List<Records>> call, Response<List<Records>> response) {
            if(!response.isSuccessful()){
                System.out.println("CODE : "+response.code());

            } 
        } 
        @Override
        public void onFailure(Call<List<Records>> call, Throwable t) {
            System.out.println(t.getMessage());
        } 
    }); 

вот мой Logcat 12-24 04: 47: 46.852 2665-3191 / system_process I / ActivityManager: START u0 {cmp = com.example.cemal.login / .ServisFisi} из uid 10060 на дисплее 0

--------- beginning of main
12-24 04:47:46.983 6086-6086/com.example.cemal.login 
I/AppCompatViewInflater: app:theme is now deprecated. Please move to using 
android:theme instead.
12-24 04:47:47.235 6086-6086/com.example.cemal.login I/System.out: CODE : 
400
12-24 04:47:47.485 6086-6100/com.example.cemal.login W/EGL_emulation: 
eglSurfaceAttrib not implemented
 12-24 04:47:47.485 6086-6100/com.example.cemal.login W/OpenGLRenderer: 
 Failed to set EGL_SWAP_BEHAVIOR on surface 0xe9bbf760, error=EGL_SUCCESS
 12-24 04:47:48.855 6086-6086/com.example.cemal.login I/Choreographer: 
 Skipped 70 frames!  The application may be doing too much work on its main 
 thread.
 12-24 04:47:48.909 2665-2684/system_process I/ActivityManager: Displayed 
 com.example.cemal.login/.ServisFisi: +1s992ms

Мой ответ JSON, который возвращается из веб-службы.

"[{\"KODU\":\"TLP.00000001\",\"ACIKLAMA\":\"ÇEK & SENET\",\"KAPALI_FL\":false,\"TARIH\":\"2018-12-24T12:57:27.711864\",\"TUTAR\":1254.78,\"DURUM\":0},{\"KODU\":\"TLP.00000002\",\"ACIKLAMA\":\"FİNANSMAN\",\"KAPALI_FL\":true,\"TARIH\":\"2018-12-24T07:57:27.711864\",\"TUTAR\":3251.7895,\"DURUM\":0},{\"KODU\":\"TLP.00000003\",\"ACIKLAMA\":\"MUHASEBE\",\"KAPALI_FL\":true,\"TARIH\":\"2018-12-24T10:57:27.711864\",\"TUTAR\":5421.1256,\"DURUM\":1},{\"KODU\":\"TLP.00000004\",\"ACIKLAMA\":\"MASRAF\",\"KAPALI_FL\":true,\"TARIH\":\"2018-12-21T12:57:27.711864\",\"TUTAR\":952.064,\"DURUM\":0},{\"KODU\":\"TLP.00000005\",\"ACIKLAMA\":\"SATINALMA\",\"KAPALI_FL\":false,\"TARIH\":\"2018-12-25T12:57:27.711864\",\"TUTAR\":37.915,\"DURUM\":1},{\"KODU\":\"TLP.00000006\",\"ACIKLAMA\":\"STOK\",\"KAPALI_FL\":false,\"TARIH\":\"2018-12-24T17:57:27.711864\",\"TUTAR\":54.782,\"DURUM\":1}]"

И мой класс POJO.Я сгенерировал его на сайте jsonschema2pojo.

@SerializedName("KODU")
@Expose
private String kODU;
@SerializedName("ACIKLAMA")
@Expose
private String aCIKLAMA;
@SerializedName("KAPALI_FL")
@Expose
private boolean kAPALIFL;
@SerializedName("TARIH")
@Expose
private String tARIH;
@SerializedName("TUTAR")
@Expose
private double tUTAR;
@SerializedName("DURUM")
@Expose
private int dURUM;

public String getKODU() {
    return kODU;
}

public void setKODU(String kODU) {
    this.kODU = kODU;
}

public String getACIKLAMA() {
    return aCIKLAMA;
}

public void setACIKLAMA(String aCIKLAMA) {
    this.aCIKLAMA = aCIKLAMA;
}

public boolean isKAPALIFL() {
    return kAPALIFL;
}

public void setKAPALIFL(boolean kAPALIFL) {
    this.kAPALIFL = kAPALIFL;
}

public String getTARIH() {
    return tARIH;
}

public void setTARIH(String tARIH) {
    this.tARIH = tARIH;
}

public double getTUTAR() {
    return tUTAR;
}

public void setTUTAR(double tUTAR) {
    this.tUTAR = tUTAR;
}

public int getDURUM() {
    return dURUM;
}

public void setDURUM(int dURUM) {
    this.dURUM = dURUM;
}

HTTP-код должен быть действительным, но он возвращает 400. Я не знаю почему.Я новичок в этом.

1 Ответ

0 голосов
/ 24 декабря 2018

Модификация BaseUrl не должна заканчиваться на /, вам нужно добавить ее в начало API в интерфейсе.Поэтому ваш код изменится, как показано ниже:

Создание компоновщика

Retrofit retrofit = new Retrofit.Builder()
.baseUrl("http://192.168.2.134:62665") 
.addConverterFactory(GsonConverterFactory.create())
.build();

Определение вызова метода

@GET("/ClientControl.svc/GetRecords")
Call<List<Records>> records();

Также сделайтеуверен, что указанный вами адрес доступен с вашего мобильного устройства.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...