Android - токен от ответа Retrofit Callback - PullRequest
0 голосов
/ 27 мая 2018

У меня есть приложение аутентификации JWT в Spring Boot.В бэкэнде метод POST / login возвращают JSON как

{"token":"xxxxxxxxxxxxxxxxxxxxxxxxx"}

У меня проблема с клиентом Android.Я использую Retrofit 2.

В интерфейсе у меня есть:

@POST("/login")
Call<TokenInfo> login(@Body UserCredentials userCredentials);

Мой модернизированный клиент:

package com.findme.my_app_android;

import retrofit2.Retrofit;
import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory;
import retrofit2.converter.gson.GsonConverterFactory;

public class RetrofitClient {

    private static Retrofit ourInstance;

    public static Retrofit getInstance(){
        if(ourInstance==null)
            ourInstance = new Retrofit.Builder()
                    .baseUrl("http://172.20.10.2:8080")
                    .addConverterFactory(GsonConverterFactory.create())
                    .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                    .build();

        return ourInstance;
    }
}

И в MainActivity я использую:

private void login(UserCredentials userCredentials, final View v){
    Call<TokenInfo> call =  restAPI.login(userCredentials);
    call.enqueue(new Callback<TokenInfo>() {
        @Override
        public void onResponse(Call<TokenInfo> call, Response<TokenInfo> response) {
            //retrofit authentication token save

            if(response.isSuccessful()){
                Log.d("token", response.body().token);
            }

            openDeviceChoiceActivity();
        }

        @Override
        public void onFailure(Call<TokenInfo> call, Throwable t) {
            openAlert(v);
        }
    });
}

В вызове <...> я использую TokenInfo и TokenHolder, как показано ниже:

public class TokenInfo {
    @SerializedName("token")
    @Expose
    public String token;
}

или

public class TokenHolder {
    private static TokenHolder instance = new TokenHolder();

    private String token = null;
    public String getToken() {
        return token;
    }

    public void setToken(String token) {
        this.token = token;
    }

    public static TokenHolder getInstance() {
        return instance;
    }
}

К сожалению, всегда мой response.body()это null.В чем проблема?

Ответы [ 2 ]

0 голосов
/ 27 мая 2018

вы должны увидеть

response.code()

, если код больше 300, то это ошибка запроса клиента, например: 404-> не найдено 401-> ошибка аутентификации и т.д., пожалуйста, дайте мне знать код ошибки

0 голосов
/ 27 мая 2018

проверить этот журнал:

    public void onResponse(Call<TokenInfo> call, Response<TokenInfo> response) {
        Log.d("error", response.errorBody().string())

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