java - 使用GET方法获取数据的Json结构android studio改造java
问题描述
我收到一个错误:预期 BEGIN_ARRAY 但在第 1 行第 2 列路径是 BEGIN_OBJECT $ 我的理解是改造需要 BEGIN_ARRAY 吗?我找到了一些解决方案,但对我不起作用。
我尝试了一些不起作用的解决方案。我认为这是我不知道如何使用它的 JSON 结构。
所以对于我的代码:我的界面
public interface UserService {
String ENDPOINT = "http://localhost:3000/";
@GET("users")
Call<List<User>> getUsers();
}
数据
public class User {
@SerializedName("_id")
@Expose
private int _id;
@SerializedName("name")
@Expose
private String name;
@SerializedName("firstname")
@Expose
private String firstname;
@SerializedName("picture")
@Expose
private String picture;
public int getId() {
return _id;
}
public String getName() {
return name;
}
public String getFirstname() {
return firstname;
}
public String getPicture() {
return picture;
}
}
我的主要活动
textViewResult = findViewById(R.id.text_view_result);
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(UserService.ENDPOINT)
.addConverterFactory(GsonConverterFactory.create())
.build();
UserService jsonUserService = retrofit.create(UserService.class);
Call<List<User>> call = jsonUserService.getUsers();
call.enqueue(new Callback<List<User>>() {
@Override
public void onResponse(Call<List<User>> call, Response<List<User>> response) {
if(!response.isSuccessful()){
textViewResult.setText("Code : " + response.code());
return;
}
List<User> users = response.body();
for(User user : users){
String content = "";
content += "ID: " + user.getId() + '\n';
content += "FirstName: " + user.getFirstname() + '\n';
content += "Name: " + user.getName() + '\n';
content += "Picture: " + user.getPicture() + '\n';
textViewResult.append(content);
}
}
@Override
public void onFailure(Call<List<User>> call, Throwable t) {
textViewResult.setText(t.getMessage());
}
});
我的 json 看起来像..
{
"users": [
{
"_id": 1,
"name": "test",
"firstname": "user",
"picture": "http://localhost:3000/imgs/1.jpg"
},
{
"_id": 2,
"name": "test1",
"firstname": "user1",
"picture": "http://localhost:3000/imgs/2.jpg"
},
{
"_id": 3,
"name": "test2",
"firstname": "user2",
"picture": "http://localhost:3000/imgs/3.jpg"
},
}
我认为是“用户”:导致了这个问题。但我不知道如何解决这个问题。
如果有人有解决方案,非常感谢。
解决方案
你的响应类应该是
class APIResponse{
@SerializedName("users")
@Expose
private List<User> users;
public List<User> getUsers()
{return users;}
public void setUsers(List<User> users)
{this.users= users;}
}
接口应该是;
public interface UserService {
String ENDPOINT = "http://localhost:3000/";
@GET("users")
Call<APIResponse> getUsers();
}
你 enqueue() 方法应该是:
call.enqueue(new Callback<APIResponse>() {
@Override
public void onResponse(Call<APIResponse> call, Response<APIResponse> response) {
if(!response.isSuccessful()){
textViewResult.setText("Code : " + response.code());
return;
}
List<User> users = response.body().getUsers();
for(User user : users){
String content = "";
content += "ID: " + user.getId() + '\n';
content += "FirstName: " + user.getFirstname() + '\n';
content += "Name: " + user.getName() + '\n';
content += "Picture: " + user.getPicture() + '\n';
textViewResult.append(content);
}
}
@Override
public void onFailure(Call<List<User>> call, Throwable t) {
textViewResult.setText(t.getMessage());
}
});
推荐阅读
- javascript - 使用javascript将数据发送到php文件
- python - 使用 python 从 xml 获取数据时未正确生成输出 xml
- xamarin - 带有 WorkManger 的 Xamarin 表单
- javascript - 包裹在共享库中的 cls-hooked 不起作用
- jenkins - 如何覆盖我的全局代理以在詹金斯声明性管道中的另一个代理上运行特定阶段?
- java - 如何使用 Glide 下载多张图片?
- python-3.x - discord.py ClientConnectorError 引发处理
- r - 如何跨用户 ID # 应用 if else 语句?
- dart - 如何从 gmail 发送电子邮件到另一个电子邮件帐户
- mysql - 如何将表 2 中的一些值和一些文字值插入到 table1 中?