web-dev-qa-db-fra.com

Paramètre de post-équipement

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

38
Dipen Patel

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
    );
}
65
Gowtham Raj

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
);
8
Ramkailash

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.

3
Singed

Retrofit 2.0 version:

@FormUrlEncoded
@POST("api/v2/users/sign_in")
Call<SignInResult> userSignIn(
        @FieldMap HashMap<String, String> authData
);
3
Robert

"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/

2
Kevin Crain

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;
}
1
Ahmad Aghazadeh