【问题标题】:POST Request Retrofit 2.0POST 请求改造 2.0
【发布时间】:2016-03-31 22:13:51
【问题描述】:

我一直在尝试使用 Retrofit 2.0 发出 POST 请求,但我遇到了一些问题。我很乐意提供任何帮助。 我有这个界面:

public interface HZApi {
@POST("URL")
Call<RespBody> register(@Body ReqBody request);
}

这是我的请求和响应类:

public class ReqBody {

@SerializedName("login")
String login;
@SerializedName("password")
String password;

public ReqBody(String login, String password){
    this.login = login;
    this.password = password;
  }

}

public class RespBody {

@SerializedName("login")
String login;
@SerializedName("password")
String password;
@SerializedName("isreg")
int isreg;

}

还有我的部分活动代码:

Retrofit retrofit = new Retrofit.Builder()
               .baseUrl("http://URL/")
               .addConverterFactory(GsonConverterFactory.create())
               .build();
        HZApi api = retrofit.create(HZApi.class);

        ReqBody req = new ReqBody(login,password);
        Call<RespBody> call = api.register(req);
        call.enqueue(new Callback<RespBody>() {
            @Override
            public void onResponse(Call<RespBody> call, Response<RespBody> response) {
                    Toast.makeText(getApplicationContext(),"OK",Toast.LENGTH_SHORT).show();
                    //answer.setText(response.body().toString());
                }

                @Override
                public void onFailure(Call<RespBody> call, Throwable t) {
                    Toast.makeText(getApplicationContext(),t.getMessage(),Toast.LENGTH_SHORT).show();
                    Log.d("MyTag",call.toString(),t);
                }
            });

当我尝试发出请求时,JSON 会抛出: 预期为 BEGIN_OBJECT,但在第 1 行第 2 列路径 $ 处为 BEGIN_ARRAY

我试图在没有特殊类的情况下发出请求,只使用一个字符串参数,但它也不起作用。感谢您的所有回复。

【问题讨论】:

    标签: android json post retrofit2


    【解决方案1】:

    您向服务器发送请求的方式是正确的。 您确定服务器返回带有简单值的 JSON 对象吗?看起来它返回 JSON 数组,因此您会收到此错误 Expected BEGIN_OBJECT but was BEGIN_ARRAY。如果服务器返回 JSON 数组,您需要相应地更改您的 RespBody 类。

    【讨论】:

    • Ruslan 是正确的,您需要检查您的服务器返回的 JSON 并根据该内容制作 RespBody
    • @RustemMuzafarov 尝试启用日志记录并检查实际发送到服务器的内容。要启用日志记录,请阅读这个简单的instruction。如果数据实际上被发送到服务器,这将意味着服务器端的问题。您的请求声明对我来说看起来不错。
    • Ruslan 感谢您的帮助。我找到了解决方案 - 我只需要在我的请求上使用 @FormUrlEncoded 注释。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-19
    • 2015-09-24
    • 2014-12-13
    • 2015-05-09
    • 2018-08-30
    相关资源
    最近更新 更多