【发布时间】:2018-01-16 23:04:39
【问题描述】:
我正在使用 Retrofit 和 RxJava 库并尝试解析此网址:
我的代码如下。
APIInterface.java
public interface APIService {
@GET("/bins/tdze5")
Observable<List<Student>> getdata();
}
MainActivity.java
public class MainActivity extends AppCompatActivity {
private RecyclerView recyclerView;
private List<Student> list;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
recyclerView = (RecyclerView) findViewById(R.id.recyclerview);
getData();
}
private void getData() {
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("https://api.myjson.com")
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.build();
APIService apiService = retrofit.create(APIService.class);
Observable<List<Student>> observable = apiService.getdata().subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread());
observable.subscribe(new Observer<List<Student>>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
Log.d("error",e.toString());
}
@Override
public void onNext(List<Student> students) {
list = new ArrayList<>();
Log.d("response size", String.valueOf(students.size()));
for(int i = 0; i < students.size(); i++){
Student student = new Student();
student.setId(students.get(i).getId());
student.setName(students.get(i).getName());
list.add(student);
}
RecyclerAdapter recyclerAdapter = new RecyclerAdapter(list);
RecyclerView.LayoutManager recyce = new LinearLayoutManager(MainActivity.this);
recyclerView.setLayoutManager(recyce);
recyclerView.setItemAnimator( new DefaultItemAnimator());
recyclerView.setAdapter(recyclerAdapter);
}
});
}
}
我的模型类如下
Student.java
public class Student {
private String id;
private String name;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
} }
我来了
D/error: java.lang.IllegalStateException: 预期的 BEGIN_ARRAY 但是是 日志中第 1 行第 2 列路径 $ 处的 BEGIN_OBJECT
我到处搜索有关此错误的信息,但找不到有关 RxJava 和 Retrofit 的任何信息。
【问题讨论】:
-
它只是你的响应是一个对象,但你试图获取数组你可以发布你的 json 响应
-
它需要一个数组,你给它一个对象。您的模型类的主要问题。你没有正确解析它。你能把你的回复贴在这里吗,服务器的回复是什么?
-
感谢您的帮助
-
@shahid17june 我收到来自服务器的空白响应,并且 onError() 被调用。
-
我的模型类很简单,带有 tham 的 String id、name 和 getter 和 setter 方法
标签: android json rx-java retrofit2 gson