2016-03-24 8 views
0

私はLoginActivityを持っています。これはユーザー名とパスワードを取得します。 POST Retrofit 2とOkHTTPを使用して認証トークンを受け取ろうとしています。私は、改造アダプタとOkHttpクライアントを構築するサービスを作成しました。私はインターフェースを持っていますが、これは私の問題が始まる場所です。Androidログイン更新機能付きの認証

FormEncodedURLの資格情報(ログイン時のユーザー名とパスワード)をバックエンドに投稿して、トークンを受け取る必要があります。トークンを受け取るには、AccessTokenという名前のPOJOが必要です。私は、URLが http://xxxxxxxxxxxxxxxx/token/username=smcnary%40metrostudy.com&password=xxxxxx&grant_type=password

のように見える必要が

など、本当に私は、コールバックメソッドでこれを正しくやっているかわからないこの記事で私を助けに関する必要な何かがあるのなら、私に知らせてください。私はむしろアンドロイドの開発に積極的で積み重なっているからです。

マイPOST呼び出しは次のようになります。

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); 
} 

は内の論理であるUserモデルがある

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

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) { 

     } 
    }); 
+0

ちょうどあなたのonResponseにブレークポイントを入れて、それを試して、そしてそれを取得決して場合そこに、それから失敗しました。あなたのURLがそのようなパスワードを渡すのはなぜですか、あなたはそれを投稿データ本体に入れておくべきです – CQM

答えて

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); 
関連する問題