У меня есть LoginActivity, которая получает имя пользователя и пароль. Я пытаюсь получить токен аутентификации, используя POST Retrofit 2 и OkHTTP. Я создал службу, которая создает модифицированный адаптер, а также клиент OkHttp. У меня есть интерфейс, но здесь начинаются мои проблемы.
Я должен опубликовать свои учетные данные (имя пользователя и пароль от входа) в FormEncodedURL на серверную часть, чтобы получить токен, для которого у меня есть POJO, называемый AccessToken. Я действительно не уверен, что делаю это правильно с помощью метода обратного вызова и т.д.
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) {
}
});