webentwicklung-frage-antwort-db.com.de

Post Parameter nachrüsten

Ich implementiere die Anmeldefunktion und verwende dafür die Post-Anfrage, bekomme aber eine Fehlermeldung

"retrofit.RetrofitError: com.squareup.okhttp.internal.http.HttpMethod.METHODS"

Unten ist mein 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();

            }
        });

Darunter logcat Ausgabe.

02-10 13: 02: 43.846: W/System.err (30684): retrofit.RetrofitError: com.squareup.okhttp.internal.http.HttpMethod.METHODS 02-10

38
Dipen Patel

Versuchen Sie dies

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

Hier ist parm1 der Parameter POST, den Sie an den Server übergeben. Dies wird Ihr Problem lösen

falls Sie PHP u verwenden, können Sie mit $uname= $_POST('username'); auf den Parameter1 zugreifen

EDIT 1:

retrofit 2.0 Version:

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

Sie können auch mehrere Feldparameter übergeben: zum Beispiel:

@FormUrlEncoded
@POST("/oauth/access_token")
void getToken(
    @FieldMap Map<String, String> params, 
    Callback<FacebookLoginUserResponse> callback
);
8
Ramkailash

Ich habe heute diesen Fehler bekommen

("retrofit.RetrofitError: com.squareup.okhttp.internal.http.HttpMethod.METHODS")

Das Problem war, dass ich verschiedene Versionen von okhttp und okhttp-urlconnection verwendete, also stellen Sie sicher, dass sie übereinstimmen.

3
Singed

Retrofit 2.0 Version:

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

"JSON - KONVERTIERUNG

Retrofit verwendet standardmäßig Gson zum Konvertieren von HTTP-Körpern in und aus JSON. Wenn Sie ein Verhalten angeben möchten, das sich von den Standardeinstellungen von Gson unterscheidet (z. B. Benennungsrichtlinien, Datum) Formate, benutzerdefinierte Typen), geben einer neuen Gson-Instanz das gewünschte Verhalten beim Erstellen eines RestAdapters. Weitere Informationen zur Anpassung finden Sie in der Gson-Dokumentation. "

Siehe Link für weitere Informationen: http://square.github.io/retrofit/

2
Kevin Crain

Sie können die Klasse folgendermaßen verwenden:

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