2015-02-10 12 views
27

I Login-Funktion bin der Umsetzung und für die Verwendung Gesuch aber ich bin Fehler immerRetrofit Beitrag Parameter

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

Im Folgenden sagen will, 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 Ausgabe Logcat.

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

+0

Wenn Sie Server erwartet Json dann versuchen, das @Body Argument macht eine Klasse. –

+0

Nein, es wird kein JSON-Objekt erwartet. Es fragt Parameter nur als String ab. –

+0

Nachrüstung serialisiert Ihre @ Body-Klasse standardmäßig, also bin ich sicher, dass Ihr Server eine Zeichenfolge bekommt –

Antwort

51

Versuchen Sie, diese mit

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 parm1 wird die POST-Parameter, die Sie an den Server vorbei wird. Dies wird Ihr Problem

in Fall lösen, wenn Sie PHP verwenden, u die param1 zugreifen können $uname= $_POST('username');

EDIT 1:

Nachrüst-Version 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 
    ); 
} 
+0

ich habe versucht, aber es funktioniert nicht –

+0

kann u den Stack-Trace in Pastebin einfügen. ans teilen den Link hier? –

+0

Ich habe die Antwort bearbeitet bitte versuchen Sie diese –

1

„JSON KONVERTIERUNG

Nachrüstung u ses Gson standardmäßig HTTP-Körper zu und von JSON zu konvertieren. Wenn Sie ein Verhalten angeben möchten, das sich von den Standardeinstellungen von Gson unterscheidet (z. B. Benennungsrichtlinien, Datumsformate, benutzerdefinierte Typen), geben Sie beim Erstellen eines RestAdapter eine neue Gson-Instanz mit dem gewünschten Verhalten an. Beachten Sie die Gson Dokumentation für weitere Details über customization „

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

+0

Ich habe bereits versucht mit Feldparameter auch. @FormUrlEncoded \t @POST ("/ api/0.01/oauth/access_token /") \t // Ihre Login-Funktion in Ihrem api \t public void Login (@Field ("client_id") String client_id, \t \t \t @ field ("client_secret") String client_secret, \t \t \t @Field ("username") String username, \t \t \t @Field ("Passwort") String Passwort, Rückruf Calback); –

3

habe ich diesen Fehler heute

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

Das Problem wurde war ich mit verschiedenen Versionen okhttp und okhttp-urlconnection, also stellen Sie sicher, dass sie übereinstimmen

+1

Danke! Dies rettete mein Leben und dachte, ich müsste auf Retrofit 2 upgraden. Ich bekam einen Fehler wie Retrofit.RetrofitError: Kein Feld METHODEN, und das hat es behoben. – Sheepdogsheep

8

Sie können auch mehrere Feldparameter übergeben: für die Prüfung ple:

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

Retrofit 2.0 Version:

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