您好,我刚刚创建了一个界面,如下所示:
public interface UserClient {
@POST("login")
Call<UserInfo> login(@Body Login login);
}
用户信息类:
public class UserInfo {
private String token;
public String getToken(){
return token;
}
public void setToken(String token){
this.token = token;
}
}
这里是主要代码:
Retrofit.Builder builder = new Retrofit.Builder()
.baseUrl("http://amirhoseinbidar.pythonanywhere.com/")
.addConverterFactory(GsonConverterFactory.create());
Retrofit retrofit = builder.build();
UserClient userClient = retrofit.create(UserClient.class);
Login login = new Login("plantdg", "1234");
Call<UserInfo> userCall = userClient.login(login);
userCall.enqueue(new Callback<UserInfo>() {
@Override
public void onResponse(Call<UserInfo> call, Response<UserInfo> response) {
if (response.isSuccessful()){
Toast.makeText(Main2Activity.this, "connection successful " +
response.body().getToken(), Toast.LENGTH_SHORT).show();
}else {
textView.setText(response.raw().toString());
//The message is : Response{protocol=http/1.1, code=500, message=Internal Server Error, url=http://amirhoseinbidar.pythonanywhere.com/login}
}
}
@Override
public void onFailure(Call<UserInfo> call, Throwable t) {
Toast.makeText(Main2Activity.this, t.getMessage(), Toast.LENGTH_SHORT).show();
}
});
所以问题是响应不成功。任何人都可以提供帮助?
注意:登录类包含两个变量(用户名、密码)和一个构造函数。
最佳答案
我解决了。我将原始数据类型而不是表单数据类型发布到服务器。所以我在界面上做了一些小改动:
@Headers( "Content-Type: application/json" )
@POST("login/")
Call<UserInfo> login(@Body JsonObject login);
注意:反斜杠对我来说很重要。
我使用了一个返回 JsonObject 的方法:
private JsonObject returnRaw() {
JsonObject gson = new JsonObject();
try {
JSONObject jsonObj_ = new JSONObject();
jsonObj_.put("username", "plantdg");
jsonObj_.put("password", "1234");
JsonParser jsonParser = new JsonParser();
gson = (JsonObject) jsonParser.parse(jsonObj_.toString());
} catch (JSONException e) {
e.printStackTrace();
}
return gson;
}
在主要代码中,我将 returnRaw() 作为参数传递给登录方法:
Call<UserInfo> userCall = userClient.login(returnRaw());
关于java - 如何在android中使用Retrofit登录Django服务器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54270267/