java.lang.IllegalStateException:期望一个字符串但在第1行第2行路径$

时间:2015-09-06 10:49:35

标签: android retrofit

我创建了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 $

3 个答案:

答案 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内容类型请求的默认解析器。