![](/img/trans.png)
[英]How convert a callback inside retrofit callback response from java to Kotlin
[英]Android - token from Retrofit Callback response
我在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);
}
});
}
在Call <...>中,我使用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
。 问题是什么?
检查此日志:
public void onResponse(Call<TokenInfo> call, Response<TokenInfo> response) {
Log.d("error", response.errorBody().string())
}
你应该看到
response.code()
如果代码大于300,则是客户端请求错误,例如:404->找不到401->身份验证错误等,请让我知道错误代码
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.