ログイン機能を実装しており、そのためにPostリクエストを使用していますが、エラーが発生しています
「retrofit.RetrofitError:com.squareup.okhttp.internal.http.HttpMethod.METHODS」
以下は私のコードです
import Java.util.HashMap;
import Java.util.Map;
import retrofit.Callback;
import retrofit.http.*;
//Myapi.Java
import Java.util.HashMap;
import Java.util.Map;
import retrofit.Callback;
import retrofit.http.*;
public interface MyApi {
/* LOGIN */
@POST("/api/0.01/oauth2/access_token/")
// your login function in your api
public void login(@Body HashMap<String, String> arguments, Callback<String> calback);
}
//In my activity
RestAdapter restAdapter = new RestAdapter.Builder()
.setEndpoint(Constants_Interface.URL).setClient(newclient)
.build();
MyApi mylogin = restAdapter.create(MyApi.class);
HashMap<String, String> dicMap = new HashMap<String, String>();
dicMap.put("client_id", XXX);
dicMap.put("client_secret", XXX);
dicMap.put("username", XXX);
dicMap.put("password", XXX);
mylogin.login(dicMap, new Callback<String>() {
@Override
public void failure(RetrofitError retrofitError) {
retrofitError.printStackTrace(); // to see if you have
// errors
}
@Override
public void success(String s, retrofit.client.Response response) {
// TODO Auto-generated method stub
Toast.makeText(getApplicationContext(), "Login Succes",
Toast.LENGTH_LONG).show();
}
});
その下にはlogcatの出力があります。
02-10 13:02:43.846:W/System.err(30684):retrofit.RetrofitError:com.squareup.okhttp.internal.http.HttpMethod.METHODS 02-10
これを使ってみてください
_public interface SafeUserApi {
@FormUrlEncoded
@POST("/api/userlogin")
void getUserLogin(
@Field("client_id") String id,
@Field("client_secret") String secret,
@Field("username") String uname,
@Field("password") String password,
Callback<LoginResult> cb
);
}
_
ここで、parm1はPOSTサーバーに渡すパラメーターです。これは問題を解決します
PHP uを使用している場合、uは$uname= $_POST('username');
を使用してparam1にアクセスできます。
編集1:
レトロフィット2.0バージョン:
_public interface SafeUserApi {
@FormUrlEncoded
@POST("/api/userlogin")
Call<ResponseBody> getUserLogin(
@Field("client_id") String id,
@Field("client_secret") String secret,
@Field("username") String uname,
@Field("password") String password
);
}
_
複数のフィールドパラメーターを渡すこともできます:例:
@FormUrlEncoded
@POST("/oauth/access_token")
void getToken(
@FieldMap Map<String, String> params,
Callback<FacebookLoginUserResponse> callback
);
今日このエラーが出ました
( "retrofit.RetrofitError:com.squareup.okhttp.internal.http.HttpMethod.METHODS")
問題は、異なるバージョンのokhttpとokhttp-urlconnectionを使用していたため、それらが一致することを確認してください。
レトロフィット2.0バージョン:
@FormUrlEncoded
@POST("api/v2/users/sign_in")
Call<SignInResult> userSignIn(
@FieldMap HashMap<String, String> authData
);
「JSON CONVERSION
RetrofitはデフォルトでGsonを使用してHTTPボディとJSONを相互に変換します。Gsonのデフォルトとは異なる動作を指定する場合(ネーミングポリシー、日付など)フォーマット、カスタムタイプ)、RestAdapterを構築するときに、希望する動作を備えた新しいGsonインスタンスを提供します。カスタマイズの詳細については、Gsonのドキュメントを参照してください。」
詳細については、リンクを参照してください: http://square.github.io/retrofit/
次のようにクラスを使用できます。
public interface SafeUserApi {
@POST("/api/userlogin")
void getUserLogin(@Body PostData postData);
}
public class PostData{
String client_id;
String client_secret;
String username;
String password;
}