проблема для REST API для отправки параметра методом GET в модификации - PullRequest
0 голосов
/ 09 октября 2018

код json:

{
"status": "SUCCESS",
"message": "Loaded cate two",
"data": {
    "id": 1,
    "cte_two_title": "Computer",
    "cate_ones_id": 1,
    "cte_type": 2,
    "created_at": "2018-09-15T09:41:15.000Z",
    "updated_at": "2018-09-15T09:41:15.000Z"
    }
}

Код интерфейса API:

@GET("cate_twos.json")
Call<Catetwolist> getCatetwo(
        @Query("cateone_id") int cte_one);

Класс Catetwolist:

public class Catetwolist {
@SerializedName("data")
@Expose
private ArrayList<CateTwo> cateTwos = null;

public ArrayList<CateTwo> getCateTwolist() {
    return cateTwos;
}

public void setCateTwolist(ArrayList<CateTwo> cateTwos) {
    this.cateTwos = cateTwos;
    }
}

Класс CateTwo:

public class CateTwo {
@SerializedName("id")
private int id;
@SerializedName("cate_ones_id")
private int cate_ones_id;
@SerializedName("cte_two_title")
private String cte_two_title;

public int getId() {
    return id;
}

public void setId(int id) {
    this.id = id;
}

public int getCate_ones_id() {
    return cate_ones_id;
}

public void setCate_ones_id(int cate_ones_id) {
    this.cate_ones_id = cate_ones_id;
}

public String getCte_two_title() {
    return cte_two_title;
}

public void setCte_two_title(String cte_two_title) {
    this.cte_two_title = cte_two_title;
    }
}

мой код очереди вызовов в главном классе:

public class ListOfCategory_Two extends AppCompatActivity {

private RecycleView_ListCateForm_two recycleView_listCateFormTwo;
private ArrayList<CateTwo> cateTwos;


//Retrofit Api Interface
private APIIinterface apiIinterface;

@BindView(R.id.recycler_list_of_cate) RecyclerView recycler_list_of_cate;
@BindView(R.id.viewCateOneInMain) ViewGroup viewCateOneInMain;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_list_two_category);
    ButterKnife.bind(this);


    RecyclerView.LayoutManager mLayoutManager_category = new 
    LinearLayoutManager(MyApplication.mContext, 
     LinearLayoutManager.VERTICAL, false);
    recycler_list_of_cate.setLayoutManager(mLayoutManager_category);
    recycler_list_of_cate.setItemAnimator(new DefaultItemAnimator());

    apiIinterface = APIClient.getClient().create(APIIinterface.class);
    Call<Catetwolist> catetwo_Call = 
    apiIinterface.getCatetwo(MyApplication.Current_cate_id_one);

    catetwo_Call.enqueue(new Callback<Catetwolist>() {
        @Override
        public void onResponse(Call<Catetwolist> call, Response<Catetwolist> 
    response) {
            cateTwos = response.body().getCateTwolist();;
            recycleView_listCateFormTwo = new 
   RecycleView_ListCateForm_two(cateTwos);
            recycler_list_of_cate.setAdapter(recycleView_listCateFormTwo);
            recycleView_listCateFormTwo.notifyDataSetChanged();
            recycler_list_of_cate.setVisibility(View.VISIBLE);
            //loadingView_CateTwo.hide();
        }

        @Override
        public void onFailure(Call<Catetwolist> call, Throwable t) {
            Log.i("aaa",t.getMessage() + "");
        }
    });

}

после запуска у меня возникает ошибка Call.enqueue в функции onFailure:

Этот код работаеткогда я не отправляю параметр, но у меня возникают проблемы при отправке его на интерфейс.

java.lang.IllegalStateException: ожидается BEGIN_ARRAY, но он был BEGIN_OBJECT в строке 1 столбца 57 пути $ .data.

Ответы [ 2 ]

0 голосов
/ 09 октября 2018

Похоже, проблема заключается в том, что вы отобразили свой раздел «данные» как ArrayList в своем POJO:

@SerializedName("data")
@Expose
private ArrayList<CateTwo> cateTwos = null;

Предоставленный JSON не соответствует POJO, и это исключение, которое вы получаете.«Данные» - это объект, а не массив.Парсер ожидает массив, но вместо этого он получает объект.

Как вы решаете это?Вариант 1: Измените свой JSON, чтобы он соответствовал этому pojo, он должен выглядеть следующим образом:

{
"status": "SUCCESS",
"message": "Loaded cate two",
"data": [{
    "id": 1,
    "cte_two_title": "Computer",
    "cate_ones_id": 1,
    "cte_type": 2,
    "created_at": "2018-09-15T09:41:15.000Z",
    "updated_at": "2018-09-15T09:41:15.000Z"
    }]
}

Вариант 2: Измените POJO, чтобы он соответствовал этому JSON:

@SerializedName("data")
@Expose
private CateTwo cateTwo = null;

Надеюсь, это поможет!

0 голосов
/ 09 октября 2018

Решение:

Вместо записи этого в ArrayList<...>:

public class Catetwolist {
    @SerializedName("data")
    @Expose
    private ArrayList<CateTwo> cateTwos = null;

    public ArrayList<CateTwo> getCateTwolist() {
        return cateTwos;
    }

    public void setCateTwolist(ArrayList<CateTwo> cateTwos) {
        this.cateTwos = cateTwos;
    }
}

Запишите его просто как класс, расширяющий класс Object:

public class Catetwolist {
    @SerializedName("data")
    @Expose
    private CateTwo cateTwos = null;

    public CateTwo getCateTwolist() {
        return cateTwos;
    }

    public void setCateTwolist(CateTwo cateTwos) {
        this.cateTwos = cateTwos;
    }
}

Попробуй, надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...