Je suis en train d'implémenter la fonction de connexion et pour cela en utilisant la requête Post mais je reçois une erreur en disant
"retrofit.RetrofitError: com.squareup.okhttp.internal.http.HttpMethod.METHODS"
Ci-dessous mon code
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();
}
});
Ci-dessous, sortie logcat.
02-10 13: 02: 43.846: W/System.err (30684): retrofit.RetrofitError: com.squareup.okhttp.internal.http.HttpMethod.METHODS 02-10
Essayez d'utiliser ceci
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
);
}
Ici, parm1 est le paramètre POST que vous allez transmettre au serveur. Cela résoudra votre problème
si vous utilisez PHP vous pouvez accéder au param1 à l’aide de $uname= $_POST('username');
EDIT 1:
version 2.0 post-équipement:
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
);
}
Vous pouvez également transmettre plusieurs paramètres de champ: par exemple:
@FormUrlEncoded
@POST("/oauth/access_token")
void getToken(
@FieldMap Map<String, String> params,
Callback<FacebookLoginUserResponse> callback
);
J'ai eu cette erreur aujourd'hui
("retrofit.RetrofitError: com.squareup.okhttp.internal.http.HttpMethod.METHODS")
Le problème était que j'utilisais différentes versions, okhttp et okhttp-urlconnection, alors assurez-vous qu'elles correspondent.
Retrofit 2.0 version:
@FormUrlEncoded
@POST("api/v2/users/sign_in")
Call<SignInResult> userSignIn(
@FieldMap HashMap<String, String> authData
);
"JSON CONVERSION
Retrofit utilise Gson par défaut pour convertir les corps HTTP en et de JSON. Si vous souhaitez spécifier un comportement différent de celui par défaut de Gson (p. Ex. Règles de nommage, date formats, types personnalisés), fournissez à votre nouvelle instance Gson le comportement souhaité lors de la construction d’un RestAdapter. Reportez-vous à la documentation Gson pour plus de détails sur la personnalisation. "
Voir le lien pour plus d’informations: http://square.github.io/retrofit/
Vous pouvez utiliser la classe comme ceci:
public interface SafeUserApi {
@POST("/api/userlogin")
void getUserLogin(@Body PostData postData);
}
public class PostData{
String client_id;
String client_secret;
String username;
String password;
}