0

ユーザー名とパスワードを取得する LoginActivity があります。POST Retrofit 2 と OkHTTP を使用して認証トークンを受信しようとしています。改造アダプターと OkHttp クライアントを構築するサービスを作成しました。インターフェイスはありますが、ここから問題が始まります。

FormEncodedURL の資格情報 (ログインからのユーザー名とパスワード) をバックエンドに投稿して、AccessToken と呼ばれる POJO を持っているトークンを受け取る必要があります。コールバックメソッドなどでこれを正しく行っているかどうかは本当にわかりません.

URL はhttp://xxxxxxxxxxxxxxxx/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 に答える