개조 및 RXAndroid를 통해 안드로이드에서 내 REST API와 상호 작용하기 위해 노력하고 있습니다. 문제가 발생했습니다. 나는 'API/사용자/{ID}/{ID}/클래스를'내에 GET 요청을 보낼 때개조 예상 BEGIN_ARRAY했지만 BEGIN_OBJECT
, 내 API는 같은, 사용자 클래스의리스트로 응답
{
"classes": [
{
"assignments": [
{
"asstype": 0,
"classs_id": 1,
"desc": "Read",
"due": "9/14/16",
"id": 1
}
],
"badge": 0,
"days": "W",
"id": 1,
"location": "W.Claire Harris Textiles 136A",
"name": "STS 1101",
"professor": "Stickel",
"time": "5:00 - 6:15",
"user_id": 1
},
{
"assignments": [],
"badge": 1,
"days": "TR",
"id": 2,
"location": "Atrium 201L",
"name": "HIST 2111",
"professor": "Pierce",
"time": "6:30 - 7:45",
"user_id": 1
}
]
}
내 인터페이스는 다음과 같습니다 :이처럼 내 조각에서 호출
@GET("api/users/{user_id}/classes")
Ovservable<List<Clazz>> getClasses(@Header("Authorization") String auth, @Path("user_id")int user_id);
:
내 Class 객체가 게터와 함께 다음과 같습니다@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View rootView = inflater.inflate(R.layout.fragment_classes, container, false);
Retrofit retrofit = new Retrofit.Builder()
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.baseUrl(Sched.API_BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.build();
RecyclerView classesRV = (RecyclerView)rootView.findViewById(R.id.classRec);
ClassInterface classAPI = retrofit.create(ClassInterface.class);
Observable<List<Class>> classes = classAPI.getClasses("Basic " +Base64.encodeToString("[email protected]:nightman_420".getBytes(), Base64.NO_WRAP), 1);
classes.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Subscriber<List<Class>>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
e.printStackTrace();
}
@Override
public void onNext(List<Class> classes) {
classesRV.setAdapter(new ClassRecyclerViewAdapter(classes, getContext()));
classesRV.setLayoutManager(new LinearLayoutManager(getContext()));
}
});
return rootView;
}
s와 세터 :
public class Class {
private int id;
private String name;
private int badge;
private String professor;
private String location;
private String days;
private String time;
private int user_id;
private List<Assignment> assignments;
public Class() {
}
은 "클래스"를 참조 GSON 안 : [] 배열을하고 그것에서 개체를 구문 분석? 무엇이 잘못 되었습니까?
글쎄 JSON은 객체가 아니라 배열입니다. 클래스의 배열을 포함하지만 REST 호출의 결과는 배열 자체가 아닙니다. Gson이 클래스 배열을 조사하는 유일한 이유는 JSON을'List'을 포함하는 객체에 매핑하려고하는 경우입니다. –
CommonsWare