【问题标题】:Expected BEGIN_OBJECT but was STRING at line 13 column 1 path $预期为 BEGIN_OBJECT,但在第 13 行第 1 列路径 $
【发布时间】:2017-06-29 09:53:53
【问题描述】:

我多次看到这个问题,但仍然无法理解。看起来我在网站上发送了请求,但它的正文不正确。但为什么?可能是我不清楚改造是如何工作的,但我不只是收集请求的链接并等待服务器的回答吗? 这是链接:here

带有请求的接口

public interface NService {
    @GET("/computers?p=2")
    Call<Model> getItems();
}

和带有基本 URL 的类

public class APIUtils {

    public static final String BASE_URL = "http://testwork.nsd.naumen.ru/rest/";

    public static NService getMService() {
        return RetrofitClient.getClient(BASE_URL).create(NService.class);
    }
}

改造构建类

public class RetrofitClient {

    private static Retrofit retrofit = null;


    public static Retrofit getClient(String baseURL) {
        if (retrofit==null) {
            Gson gson = new GsonBuilder()
                    .setLenient()
                    .create();
            retrofit = new Retrofit.Builder()
                    .baseUrl(baseURL)
                    .addConverterFactory(GsonConverterFactory.create(gson))
                    .build();
        }
        return retrofit;
    }
}

通过this解析JSON

而 MainActivity 是:

public class MainActivity extends AppCompatActivity {
    private List<Item> responseModel;
    private NService mService;
    private TextView textView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.d("testcrap", "before loading set");
        setContentView(R.layout.activity_main);
        mService = APIUtils.getMService(); // Строим retrofit объект, собираем ссылку
        Log.d("testcrap", "before loading");
        loadSomeCrap();
        Log.d("testcrap", "after loading");
    }

    public void loadSomeCrap() {
        Log.d("testcrap", "started parsing");
        mService.getItems().enqueue(new Callback<Model>() {

            @Override
            public void onResponse(Call<Model> call, Response<Model> response) {
                Log.d("testcrap", "started onResponse");

                if(response.isSuccessful()) {
                    Log.d("testcrap", "posts loaded from API");
                }else {
                    Log.d("testcrap", "posts not loaded from API");
                }
            }

            @Override
            public void onFailure(Call<Model> call, Throwable t) {
                //showErrorMes  sage();
                Log.d("testcrap", t.toString());

            }
        });
    }
}

日志:

before loading set
before loading
started parsing
after loading
com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 13 column 1 path $

那么,如果是错误的请求,我应该改变什么才能正常工作?

【问题讨论】:

  • 你的模型课有问题请过去模型课,我可以帮忙

标签: java android gson retrofit2


【解决方案1】:

进行这些更改..

BASE_URL = "http://testwork.nsd.naumen.ru/"

然后在界面..

@GET("rest/computers?p=2")
.............

【讨论】:

    【解决方案2】:

    您的 API 或 JSON 响应正在返回 JSON_OBJECT,但您在 String 中获取它,因此会向您显示此 JsonSyntaxException。尝试在 OBJECT 中获取响应。

    【讨论】:

      猜你喜欢
      • 2021-09-14
      • 1970-01-01
      • 2017-05-12
      • 2016-07-05
      • 2016-01-02
      • 1970-01-01
      • 2018-05-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多