【问题标题】:Android - token from Retrofit Callback responseAndroid - 来自 Retrofit 回调响应的令牌
【发布时间】:2019-01-23 23:28:05
【问题描述】:

我在 Spring Boot 应用程序中有一个 JWT 身份验证。在后端,POST 方法 /login 像这样返回 JSON

{"token":"xxxxxxxxxxxxxxxxxxxxxxxxx"}

我在使用 Android 客户端时遇到了这个问题。我使用改造 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);
        }
    });
}

在通话中<...> 我使用TokenInfoTokenHolder 如下:

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。有什么问题?

【问题讨论】:

  • 检查response.errorBody()你可能会遇到一些错误
  • okhttp3.ResponseBody$1@c58980e
  • 问题可能出在request。您发送的request 是否正确?检查 url 和凭据。同样在TokenInfo 的 POJO 类中,为token 变量生成gettersetter

标签: java android spring-boot


【解决方案1】:

检查此日志:

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

    }

【讨论】:

  • 我明白了http3.ResponseBody$1@c58980e
  • 我想你忘记添加 string()
  • 我有 toString()
  • 不是toString() 改成string() 这是两个不同的功能
  • 好的,谢谢。我得到 {"error" : "Authentication failed" }
【解决方案2】:

你应该看到

response.code()

如果代码大于 300,那么它是客户端请求错误,例如: 404-> 未找到 401-> 身份验证错误等 请告诉我错误代码

【讨论】:

    猜你喜欢
    • 2017-12-29
    • 1970-01-01
    • 2016-10-12
    • 1970-01-01
    • 1970-01-01
    • 2016-02-27
    • 1970-01-01
    • 2015-09-19
    • 1970-01-01
    相关资源
    最近更新 更多