Reputation: 933
I am implementing login feature and for that using Post request but i am getting error saying
"retrofit.RetrofitError: com.squareup.okhttp.internal.http.HttpMethod.METHODS"
Below is my 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();
}
});
Below it logcat output.
02-10 13:02:43.846: W/System.err(30684): retrofit.RetrofitError: com.squareup.okhttp.internal.http.HttpMethod.METHODS 02-10
Upvotes: 46
Views: 74096
Reputation: 17131
You can use the class like this:
public interface SafeUserApi {
@POST("/api/userlogin")
void getUserLogin(@Body PostData postData);
}
public class PostData{
String client_id;
String client_secret;
String username;
String password;
}
Upvotes: 3
Reputation: 2955
Try using this
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
);
}
Here parm1 is the POST parameter that you will be passing it to the server. This will solve your problem
in case if you are using PHP u can access the param1 using $uname= $_POST('username');
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
);
}
Upvotes: 81
Reputation: 1710
Retrofit 2.0 version:
@FormUrlEncoded
@POST("api/v2/users/sign_in")
Call<SignInResult> userSignIn(
@FieldMap HashMap<String, String> authData
);
Upvotes: 5
Reputation: 1850
You can also pass multiple field parameter: for example:
@FormUrlEncoded
@POST("/oauth/access_token")
void getToken(
@FieldMap Map<String, String> params,
Callback<FacebookLoginUserResponse> callback
);
Upvotes: 8
Reputation: 1113
I got this error today
("retrofit.RetrofitError: com.squareup.okhttp.internal.http.HttpMethod.METHODS")
The problem was I was using different versions okhttp and okhttp-urlconnection, so make sure they match.
Upvotes: 3
Reputation: 1935
"JSON CONVERSION
Retrofit uses Gson by default to convert HTTP bodies to and from JSON. If you want to specify behavior that is different from Gson's defaults (e.g. naming policies, date formats, custom types), provide a new Gson instance with your desired behavior when building a RestAdapter. Refer to the Gson documentation for more details on customization."
See link for more info: http://square.github.io/retrofit/
Upvotes: 3