【发布时间】:2018-10-07 22:36:43
【问题描述】:
我有一个用于令牌登录的 Web 服务链接。但是在这个链接中,链接末尾没有“/”。并且 android studio 会出错,称为baseUrl must end in /。当我输入/ 时,它没有得到令牌并说token is not truth :(,因为我认为链接不正确。我使用retrofit2library。请帮我解决。
MainActivity.java
public class MainActivity extends AppCompatActivity {
Retrofit.Builder builder = new Retrofit.Builder()
.baseUrl("http://website.net/token")
.addConverterFactory(GsonConverterFactory.create());
Retrofit retrofit = builder.build();
UserClient userClient = retrofit.create(UserClient.class);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
Button loginButton=(Button)findViewById(R.id.btn_login);
loginButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
login();
/* Intent intentLogin=new Intent(MainActivity.this,MainPageActivity.class);
startActivity(intentLogin);*/
}
});
}
private static String token;
private void login() {
Login login = new Login("abcd", "1234");
Call<User> call = userClient.login(login);
call.enqueue(new Callback<User>() {
@Override
public void onResponse(Call<User> call, Response<User> response) {
if (response.isSuccessful()){
Toast.makeText(MainActivity.this, response.body().getToken(), Toast.LENGTH_SHORT).show();
token = response.body().getToken();
}
else {
Toast.makeText(MainActivity.this, "Token is not truth :(", Toast.LENGTH_SHORT).show();
}
}
@Override
public void onFailure(Call<User> call, Throwable t) {
Toast.makeText(MainActivity.this, "error!", Toast.LENGTH_SHORT).show();
}
});
}
}
`Login.java
public class Login {
private String user;
private String password;
public Login(String user, String password) {
this.user = user;
this.password = password;
}
}
User.java
public class User {
private int id;
private String email;
private String token;
public int getId(){
return id;
}
public void setId(){
this.id = id;
}
public String getEmail(){
return email;
}
public void setEmail(String email){
this.email = email;
}
public String getToken(){return token;}
public void setToken(String token){this.token = token;}
}
UserClient.java
import com.squareup.okhttp.ResponseBody;
import retrofit2.Call;
import retrofit2.http.Body;
import retrofit2.http.GET;
import retrofit2.http.Header;
import retrofit2.http.POST;
public interface UserClient {
@POST("Login")
Call<User> login(@Body Login login);
// @GET("secretinfo")
// Call<ResponseBody> getSecret(@Header("Authorization") String authToken);
}
【问题讨论】:
-
改一下
public interface UserClient { @POST("/Login") Call<User> login(@Body Login login); } -
它不工作。完整链接是 website.net/token。 /之后没有登录。
-
那么,为什么要这样写
@POST("Login")?下面给出的答案应该有效。除非有另一个错误,否则您还可以在您放置token is not truthtoast 的其他位置记录响应错误消息:) -
我从视频中学习了这种方法,所以我对这个登录没有任何想法。:D 我添加了 Log.message 但它显示令牌为空。好像你说的还有一个问题。感谢您的帮助:)
-
不用担心,您在请求类型
@POST / @GET / @PUT之后使用的字符串实际上是(该baseUrl 的)终点
标签: java android jwt retrofit2