所以我试图把JSON数据解析到我的回收视图中。但是错误地说:“预期的begin数组但是BEGIN_OBJECT在第1行”
我的JSON响应:
{
"status": "success",
"data": {
"0": {
"id": "8",
"name": "hmhshwv",
"description": "vhhh",
"location": "nhhjj"
},
"1": {
"id": "54",
"name": "mabwb",
"description": "ywg",
"location": "gwgw"
}
"2": {
"id": "48",
"name": "nnf",
"description": "gwb",
"location": "wggw"
}
}
}我的模范班:
public class DataModel {
private String id;
private String firstname;
private String lastname;
private String contact;
public DataModel(String id, String firstname, String lastname, String contact) {
this.id = id;
this.firstname = firstname;
this.lastname = lastname;
this.contact = contact;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getFirstname() {
return firstname;
}
public void setFirstname(String firstname) {
this.firstname = firstname;
}
public String getLastname() {
return lastname;
}
public void setLastname(String lastname) {
this.lastname = lastname;
}
public String getContact() {
return contact;
}
public void setContact(String contact) {
this.contact = contact;
}
}我的apiInterface: api有body参数,如apikey、userid和storeid。
public interface MyApiCall {
@Headers("Accept: application/json")
@POST("mybiz/api/staff-list")
Call<List<DataModel>> getDataModel(
@Body String apikey,
@Body String userid,
@Body String storeid
);
}我的RetrofitClient课程:
public class RetrofitClient {
private static final String BASE_URL = "https://api.pidu.in/";
private static Retrofit retrofit = null;
public static MyApiCall getRetrofitClient() {
if(retrofit == null) {
retrofit = new Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.build();
}
return retrofit.create(MyApiCall.class);
}
}我的MainActivity
private static final String TAG = MainActivity.class.getSimpleName();
private static final String apikey = "somethinggg";
private static final String userid = "a number";
private static final String storeid = "158";
RecyclerView recyclerView;
ProgressBar progressBar;
LinearLayoutManager linearLayoutManager;
DataModelAdapter dataModelAdapter;
List<DataModel> dataModels = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
recyclerView = (RecyclerView) findViewById(R.id.recyclerView);
progressBar = (ProgressBar) findViewById(R.id.progressBar3);
linearLayoutManager = new LinearLayoutManager(this);
recyclerView.setLayoutManager(linearLayoutManager);
dataModelAdapter = new DataModelAdapter(dataModels);
recyclerView.setAdapter(dataModelAdapter);
fetchDataModel();
}
private void fetchDataModel() {
progressBar.setVisibility(View.VISIBLE);
RetrofitClient.getRetrofitClient().getDataModel(apikey, userid, storeid).enqueue(new Callback<List<DataModel>>() {
@Override
public void onResponse(@NonNull Call<List<DataModel>> call, @NonNull Response<List<DataModel>> response) {
if(response.isSuccessful() && response.body() != null) {
Log.e(TAG, "Error: " + response.body());
dataModels.addAll(response.body());
dataModelAdapter.notifyDataSetChanged();
progressBar.setVisibility(View.GONE);
}
}
@Override
public void onFailure(@NonNull Call<List<DataModel>> call, @NonNull Throwable t) {
Toast.makeText(MainActivity.this, "Error: " + t.getLocalizedMessage(), Toast.LENGTH_LONG).show();
}
});
}作为参考,我的hoppscotch api看起来如下:
我知道我应该解析JSON对象,但是找不到一种特殊的方法。
发布于 2022-01-29 10:13:36
您的getDataModel()正在请求一个List<DataModel>,但是服务器的响应是返回一个Object。
例如,您应该创建一个名为Response的新类,如下所示:
public class Response {
private String status;
private Map<String, DataModel> data;
public Response(String status, Map<String, DataModel> data) {
this.status = status;
this.data = data;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public Map<String, DataModel> getData() {
return data;
}
public void setData(Map<String, DataModel> data) {
this.data = data;
}
}你的要求是这样的:
public interface MyApiCall {
@Headers("Accept: application/json")
@POST("mybiz/api/staff-list")
Call<List<Response>> getDataModel(
@Body String apikey,
@Body String userid,
@Body String storeid
);
}发布于 2022-01-29 10:28:28
我认为您的JSON格式无效。无法处理对象中的对象列表。应该是一份名单。就像这样:
{
"status": "success",
"data": [
{
"id": "8",
"name": "hmhshwv",
"description": "vhhh",
"location": "nhhjj"
},
{
"id": "54",
"name": "mabwb",
"description": "ywg",
"location": "gwgw"
},
{
"id": "48",
"name": "nnf",
"description": "gwb",
"location": "wggw"
}
]
}数据模型类是:
import java.util.List;
public class DataModel {
private String status;
private List<Datum> data = null;
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public List<Datum> getData() {
return data;
}
public void setData(List<Datum> data) {
this.data = data;
}
}
class Datum {
private String id;
private String name;
private String description;
private String location;
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;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public String getLocation() {
return location;
}
public void setLocation(String location) {
this.location = location;
}
}https://stackoverflow.com/questions/70903950
复制相似问题