44

ログイン機能を実装しており、そのためにPostリクエストを使用していますが、エラーが発生しています

"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

4

6 に答える 6

77

これを使ってみてください

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

編集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
    );
}
于 2015-02-10T07:24:53.077 に答える
3

「JSON変換

Retrofit はデフォルトで Gson を使用して、HTTP ボディを JSON との間で変換します。Gson のデフォルトとは異なる動作 (ネーミング ポリシー、日付形式、カスタム タイプなど) を指定する場合は、RestAdapter を構築するときに目的の動作を持つ新しい Gson インスタンスを提供します。カスタマイズの詳細については、Gson のドキュメントを参照してください。」

詳細については、リンクを参照してください: http://square.github.io/retrofit/

于 2015-02-10T07:34:46.187 に答える
3

今日、このエラーが発生しました

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

問題は、異なるバージョンの okhttp と okhttp-urlconnection を使用していたため、それらが一致していることを確認してください。

于 2015-08-31T22:53:51.803 に答える