簡體   English   中英

預期為BEGIN_OBJECT,但位於第13行第1列的路徑$ STRING

[英]Expected BEGIN_OBJECT but was STRING at line 13 column 1 path $

我已經多次看到此問題,但仍然無法理解。 好像我在現場發送請求,但它的正文不正確。 但為什么? 可能是我不太清楚改造的工作原理,但是我是否不只是收集請求的鏈接並等待服務器的答復? 這里是鏈接: 這里

帶請求的接口

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

並使用基本網址進行分類

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;
    }
}

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 $

因此,如果請求錯誤,對於正常工作我應該更改什么?

您的API或JSON響應返回JSON_OBJECT,但您通過String獲取它,因此向您顯示此JsonSyntaxException。 嘗試獲取對象中的響應。

進行這些更改..

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

然后在界面上..

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM