1
我一直在试图通过使用Retrofit 2.0进行POST请求,但我遇到了一些问题。我很乐意提供任何帮助。 我有这样的接口:POST请求改进2.0
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,但BEGIN_ARRAY在第1行第2列路径$
我试图做一个没有特殊类的请求,只是使用一个String参数,但它也不起作用。感谢您的答复。
Ruslan是正确的,你需要检查你的服务器返回的是什么JSON,并根据该 –
@RustemMuzafarov尝试启用日志并检查实际上是否发送到服务器进行RespBody。要启用日志记录,请阅读这个简单的[说明](https://futurestud.io/blog/retrofit-2-log-requests-and-responses)。如果数据实际上被发送到服务器,这将意味着服务器端的问题。你的请求声明对我来说看起来不错。 – Ruslan
Ruslan谢谢你的帮助。我找到了一个解决方案 - 我只需要在我的请求中使用@FormUrlEncoded注释。 –