预期BEGIN_OBJECT但是在第13行第1列路径$ STRING

时间:2017-06-29 09:53:53

标签: java android gson retrofit2

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

带请求的界面

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

改造构建类

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());

            }
        });
    }
}

通过this

解析了JSON

和MainActivity是:

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 $

日志:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">
    <TextView
        android:id="@+id/tvSongDes"
        android:layout_marginStart="@dimen/dimen16"
        android:layout_marginEnd="@dimen/dimen16"
        android:layout_marginTop="@dimen/dimen16"
        android:maxLines="3"
        android:text="Dummy dummy Dummy dummy Dummy dummy Dummy dummy Dummy dummy Dummy dummy Dummy dummy Dummy dummy Dummy dummy Dummy dummy Dummy dummy Dummy dummy Dummy dummy Dummy dummy Dummy dummy Dummy dummy Dummy dummy Dummy dummy Dummy dummy Dummy dummy Dummy dummy Dummy dummy Dummy dummy Dummy dummy Dummy dummy Dummy dummy Dummy dummy Dummy dummy Dummy dummy Dummy dummy "
        android:layout_width="match_parent"
        android:layout_height="wrap_content"

        />

    <Button
        android:id="@+id/btShowmore"
        android:layout_width="wrap_content"
        android:layout_marginStart="@dimen/dimen16"
        android:text="Showmore..."
        android:textAllCaps="false"
        android:textColor="@android:color/holo_blue_light"
        android:background="@android:color/transparent"
        android:layout_height="wrap_content" />
</LinearLayout>

所以,如果提出错误请求,我应该为正常工作做些什么改变?

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

进行这些更改..

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

然后在接口..

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