Java 改造后参数

Java 改造后参数,java,android,rest,retrofit,retrofit2,Java,Android,Rest,Retrofit,Retrofit2,我正在使用Post请求实现登录功能,但我得到的错误是 “改装。改装错误: 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 j

我正在使用Post请求实现登录功能,但我得到的错误是

“改装。改装错误: 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();

            }
        });
import java.util.HashMap;
导入java.util.Map;
进口改装.回收;
http.*;
//Myapi.java
导入java.util.HashMap;
导入java.util.Map;
进口改装.回收;
http.*;
公共接口MyApi{
/*登录*/
@POST(“/api/0.01/oauth2/access\u token/”)
//api中的登录函数
public void登录(@Body HashMap参数,回调calback);
}
//在我的活动中
RestAdapter RestAdapter=new RestAdapter.Builder()
.setEndpoint(常量_Interface.URL).setClient(新客户端)
.build();
MyApi mylogin=restAdapter.create(MyApi.class);
HashMap dicMap=新的HashMap();
dicMap.put(“客户id”,XXX);
dicMap.put(“客户机密”,XXX);
dicMap.put(“用户名”,XXX);
dicMap.put(“密码”,XXX);
login(dicMap,newcallback()){
@凌驾
公共无效故障(改型错误改型错误){
InversionError.printStackTrace();//查看是否有
//错误
}
@凌驾
public void成功(字符串s,reformation.client.Response){
//TODO自动生成的方法存根
Toast.makeText(getApplicationContext(),“登录成功”,
Toast.LENGTH_LONG).show();
}
});
下面是logcat输出

02-10 13:02:43.846:W/系统错误(30684):改装。改装错误: com.squareup.okhttp.internal.http.HttpMethod.METHODS 02-10

试着用这个

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
    );
}
“JSON转换

改型默认情况下使用Gson将HTTP正文与JSON进行转换。如果要指定与Gson默认行为不同的行为(例如命名策略、日期格式、自定义类型),在生成RestaAdapter时,提供一个具有所需行为的新Gson实例。有关自定义的详细信息,请参阅Gson文档。“

有关更多信息,请参阅链接:
我今天遇到了这个错误

(“Refundation.RefundationError:com.squareup.okhttp.internal.http.HttpMethod.METHODS”)


问题是我使用了不同版本的okhttp和okhttp urlconnection,因此请确保它们匹配。

您还可以传递多个字段参数: 例如:

@FormUrlEncoded
@POST("/oauth/access_token")
void getToken(
    @FieldMap Map<String, String> params, 
    Callback<FacebookLoginUserResponse> callback
);
@FormUrlEncoded
@POST(“/oauth/access\u令牌”)
虚无(
@现场地图参数,
回调
);
改装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
    );
}
@FormUrlEncoded
@POST("api/v2/users/sign_in")
Call<SignInResult> userSignIn(
        @FieldMap HashMap<String, String> authData
);
@FormUrlEncoded
@POST(“api/v2/用户/登录”)
呼叫用户登录(
@FieldMap HashMap authData
);

您可以这样使用该类:

public interface SafeUserApi {
    @POST("/api/userlogin")
    void getUserLogin(@Body PostData postData);
}

public class PostData{
      String client_id;
      String client_secret;
      String username;
      String password;
}

如果服务器需要Json,则尝试将@Body参数设置为类。不,它不需要Json对象。它只是以字符串的形式询问参数。默认情况下,改型会序列化@Body类,因此我确信您的服务器将获得字符串我已更新logcat输出,您可以查看它吗?这很容易使用服务器预期的字段创建LoginResponse类,并使用Callback而不是Callback,改型正在尝试反序列化。您可以将堆栈跟踪粘贴到pastebin ans中并在此处共享链接吗?我想使用什么应用程序/json MIME类型?如果你删除了回调,那么你将如何响应我也不能在我的PHP代码中使用$_POST['username']访问参数。你确定你使用了相同的
@FormUrlEncoded
@Field
?我也尝试了Field参数@FormUrlEncoded@POST(“/api/0.01/oauth/access_-token/”/”/),api中的登录函数为public void login(@Field(“client_-id”)String client_-id、@Field(“client_-secret”)String client_-secret、@Field(“username”)String username、@Field(“password”)String password、Callback calback);非常感谢。这救了我的命,我想我必须升级到改装2。我遇到了一个错误,比如改型。改型错误:没有字段方法,这就解决了它。