0

我有一个 LoginActivity,它获取用户名和密码。我正在尝试使用 POST Retrofit 2 和 OkHTTP 接收身份验证令牌。我创建了构建改造适配器的服务,以及 OkHttp 客户端。我有一个界面,但这是我的问题开始的地方。

我必须在 FormEncodedURL 中将我的凭据(登录时的用户名和密码)发布到后端以接收令牌,我有一个称为 AccessToken 的 POJO。我真的不确定我是否使用回调方法等正确执行此操作。

URL 需要类似于 http://xxxxxxxxxxxxxxxxxx/token/username=smcnary%40metrostudy.com&password=xxxxxx&grant_type=password

请让我知道是否还有其他需要帮助我完成这篇文章,因为我对 android 开发和堆叠还比较陌生。

我的 POST 调用如下所示:

 @POST("token")
Call<AccessToken> getAuthToken(@Body User user);

用户模型在哪里:

public class User {
@SerializedName("password")
String password;
@SerializedName("username")
String email;
String grantType;
public User(String email, String password, String grantType ) {
    this.email = email;
    this.password = password;
    this.grantType = grantType;
}}

AccessToken 模型是:

public class AccessToken {

private String accessToken;
private String tokenType;
private Integer expiresIn;
private String name;
private String title;
private String picImageBase64String;
private String Issued;
private String Expires;
private Map<String, Object> additionalProperties = new HashMap<String, Object>();

public String getAccessToken() {
    return accessToken;
}

public void setAccessToken(String accessToken) {
    this.accessToken = accessToken;
}

public String getTokenType() {
    return tokenType;
}

public void setTokenType(String tokenType) {
    this.tokenType = tokenType;
}

public Integer getExpiresIn() {
    return expiresIn;
}

public void setExpiresIn(Integer expiresIn) {
    this.expiresIn = expiresIn;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public String getTitle() {
    return title;
}

public void setTitle(String title) {
    this.title = title;
}

public String getPicImageBase64String() {
    return picImageBase64String;
}

public void setPicImageBase64String(String picImageBase64String) {
    this.picImageBase64String = picImageBase64String;
}

public String getIssued() {
    return Issued;
}

public void setIssued(String Issued) {
    this.Issued = Issued;
}

public String getExpires() {
    return Expires;
}

public void setExpires(String Expires) {
    this.Expires = Expires;
}

public Map<String, Object> getAdditionalProperties() {
    return this.additionalProperties;
}

public void setAdditionalProperty(String name, Object value) {
    this.additionalProperties.put(name, value);
}

这是 LoginActivity 中的逻辑

public void login() {
    Log.d(TAG, "Login");

    if (!validate()) {
        onLoginFailed();
        return;
    }

    _loginButton.setEnabled(false);

    final ProgressDialog progressDialog = new ProgressDialog(LoginActivity.this,
            R.style.AppTheme);
    progressDialog.setIndeterminate(true);
    progressDialog.setMessage("Authenticating...");
    progressDialog.show();

    String email = _emailText.getText().toString();
    String password = _passwordText.getText().toString();
    String grantType = "grant_type=password";
    User user = new User(email, password, grantType);
    Call<AccessToken> call = figgApiService.getAuthToken(user);
    call.enqueue(new Callback<AccessToken>() {
        @Override
        public void onResponse(Call<AccessToken> call, Response<AccessToken> response) {
            int statusCode = response.code();
            AccessToken accesstoken = response.body();
        }

        @Override
        public void onFailure(Call<AccessToken> call, Throwable t) {

        }
    });
4

1 回答 1

0

您需要将界面更改为:

@FormUrlEncoded
@POST("token")
Call<AccessToken> getAuthToken(@Field("username") String username, @Field("password") String password, @Field("grant_type") String grantType);

你的电话会是这样的:

Call<AccessToken> call = figgApiService.getAuthToken(email, password, grantType);
于 2016-03-24T21:32:42.050 回答