我创建了Retrofit界面
public interface UserService {
@GET(Constants.Api.URL_LOGIN)
Call<String> loginUser(@Query("email") String email, @Query("password") String pass, @Query("secret") String secret, @Query("device_id") String deviceid, @Query("pub_key") String pubkey, @Query("device_name") String devicename);
在活动中我致电
final Call<String> responce = service.loginUser(loginedt.getText().toString(), md5(passwordedt.getText().toString()), secret, device_id, pub_key, device_name);
responce.enqueue(new Callback<String>() {
@Override
public void onResponse(Response<String> response) {
if (response.code() == Constants.Status.ERROR_404) {
Toast.makeText(LoginActivity.this, getResources().getString(R.string.wrong_log_pass), Toast.LENGTH_LONG).show();
} else if (response.code() != Constants.Status.ERROR_404 && response.code() != Constants.Status.SUCCES) {
Toast.makeText(LoginActivity.this, getResources().getString(R.string.wrong_request), Toast.LENGTH_LONG).show();
} else {
startActivity(new Intent(LoginActivity.this, MainActivity.class));
}
}
@Override
public void onFailure(Throwable t) {
t.printStackTrace();
}
});
我收到错误
onFailure java.lang.IllegalStateException:期望一个字符串,但是第1行第2行路径为BEGIN_OBJECT $
答案 0 :(得分:2)
您的API的响应是什么? Retrofit将服务器响应解析为传递给调用对象的类型,即Call<ResponseTypeObject> loginUser(@Query("email") String email, @Query("password") String pass, @Query("secret") String secret, @Query("device_id") String deviceid, @Query("pub_key") String pubkey, @Query("device_name") String devicename);
。从您收到的错误开始,服务器在您期待字符串时返回对象。
将您的服务改为
ResponseTypeObject
其中{{1}}是从服务器返回的响应实体
答案 1 :(得分:1)
每当Gson转换器未能将Json对象从服务器解析为预期的返回类型(在您的情况下,它是一个String)时,就会发生此类错误。在这种情况下,请将返回类型从Call<String>
更改为Call<ResponseBody>
。
答案 2 :(得分:0)
如果您不创建自己的模型,请使用Call<JsonObject>
。
这是应用程序/ json内容类型请求的默认解析器。