2015-02-10 6 views
27

Я реализую функцию входа в систему и для этого, используя сообщение запроса, но я получаю сообщение об ошибке сказавдооснащения Сообщение Параметр

"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

+0

Если вы сервер ожидает Json затем попытаться сделать @body аргумент класса. –

+0

Нет, он не ожидает объекта json. Он запрашивает параметр только как строку. –

+0

Дооснащение сериализует ваш класс @Body по умолчанию, поэтому я уверен, что ваш сервер будет получать строку –

ответ

51

Попробуйте использовать этот

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 и может получить доступ к param1 используя $uname= $_POST('username');

EDIT 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 
    ); 
} 
+0

я пытался, но он не будет работать –

+0

может у вставить трассировки стека в Pastebin. ans поделитесь ссылкой здесь? –

+0

Я отредактировал ответ, пожалуйста, попробуйте этот –

1

«JSON КОНВЕРСИЯ

Модернизация u ses Gson по умолчанию конвертирует тела HTTP в JSON и из него. Если вы хотите указать поведение, отличное от по умолчанию Gson (например, политики именования, форматы дат, настраиваемые типы), при создании RestAdapter предоставить новый экземпляр Gson с вашим желаемым поведением. Обратитесь к документации Gson для получения более подробной информации о настройке «

См ссылку для получения дополнительной информации:. http://square.github.io/retrofit/

+0

Я уже пробовал с параметром поля. @FormUrlEncoded \t @POST ("/ апи/0,01/OAuth/access_token /") \t // ваша функция Войти в вашем апи \t общественного недействительными Логин (@Field ("client_id") Строка client_id, \t \t \t @ поле ("client_secret") Строка client_secret, \t \t \t @Field ("имя пользователя") Строка имя пользователя, \t \t \t @Field ("пароль") Строка пароля, обратный вызов Колбек); –

3

Я получил сегодня эту ошибку

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

Проблема я использовал различные версии okhttp и okhttp-urlconnection, поэтому убедитесь, что они совпадают.

+1

Спасибо! Это спасло мне жизнь, я подумал, что мне придется обновиться до Retrofit 2. У меня возникла ошибка, например, retrofit.RetrofitError: No field METHODS, и это исправлено. – Sheepdogsheep

8

Вы также можете передать несколько параметров поля: для экзамена PLE:

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

дооснащения версии 2.0:

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

 Смежные вопросы

  • Нет связанных вопросов^_^