gson 来自Android Studio中的rest api的GET请求:应为开始_ARRAY,但实际为字符串

weylhg0b  于 2022-11-06  发布在  Android
关注(0)|答案(1)|浏览(172)

我是新的Android应用程序开发与java和我试图从外部API获取数据。然而,我得到的错误:Expected BEGIN_OBJECT but was STRING at line 1 column 1 path $。API会以下列格式传回结果:

  1. [ {} ,{} , ... ]

其中我将每个对象定义为一个结果,并在API接口中列出这些结果。
每个对象的形式为:

  1. {
  2. area: "athens",
  3. areaid: 1002,
  4. dailydose1: 276,
  5. dailydose2: 305,
  6. daydiff: -49,
  7. daytotal: 581,
  8. referencedate: "2021-05-27T00:00:00",
  9. totaldistinctpersons: 25446,
  10. totaldose1: 25446,
  11. totaldose2: 12098,
  12. totalvaccinations: 36960
  13. }

我的代码:
CovidApi.java

  1. public interface CovidApi {
  2. @GET("/")
  3. Call<List<CovidSingleResult>> getCovidData();
  4. }

CovidSingleResult.java

  1. public class CovidSingleResult {
  2. private int totalvaccinations;
  3. private int daytotal;
  4. private String referencedate;
  5. private int totaldose1;
  6. private int totaldose2;
  7. private String area;
  8. private int areaid;
  9. private int dailydose1;
  10. private int dailydose2;
  11. private int daydiff;
  12. public String getArea() {
  13. return area;
  14. }
  15. public int getDailydose1() {
  16. return dailydose1;
  17. }
  18. public int getDaytotal() {
  19. return daytotal;
  20. }
  21. public int getDailydose2() {
  22. return dailydose2;
  23. }
  24. public String getReferencedate() {
  25. return referencedate;
  26. }
  27. public int getAreaid() {
  28. return areaid;
  29. }
  30. public int getTotaldose1() {
  31. return totaldose1;
  32. }
  33. public int getTotaldose2() {
  34. return totaldose2;
  35. }
  36. public int getDaydiff() {
  37. return daydiff;
  38. }
  39. public int getTotalvaccinations() {
  40. return totalvaccinations;
  41. }
  42. }

Fragment.java ,我在这里调用api url

  1. resultText = root.findViewById(R.id.response); //text to set api result
  2. Gson gson = new GsonBuilder()
  3. .setLenient()
  4. .create();
  5. Retrofit retrofit = new Retrofit.Builder()
  6. .baseUrl("https://data.gov.gr/api/v1/query/mdg_emvolio/date_from="+binding.inputFrom.getText()+"&date_to="+binding.inputTo.getText()+"/")
  7. .addConverterFactory(GsonConverterFactory.create(gson))
  8. .build();
  9. CovidApi covidApi = retrofit.create(CovidApi.class);
  10. Call<List<CovidSingleResult>> call = covidApi.getCovidData();
  11. call.enqueue(new Callback<List<CovidSingleResult>>() {
  12. @Override
  13. public void onResponse(Call<List<CovidSingleResult>> call, retrofit2.Response<List<CovidSingleResult>> response) {
  14. if(!response.isSuccessful()){
  15. resultText.setText("Code" + response.code());
  16. return;
  17. }else{
  18. List<CovidSingleResult> covidSingleResults = response.body();
  19. for(CovidSingleResult p : covidSingleResults){
  20. String content = "";
  21. content += "total vaccinations :" + p.getTotalvaccinations();
  22. resultText.append(content);
  23. }
  24. }
  25. }
  26. @Override
  27. public void onFailure(Call<List<CovidSingleResult>> call, Throwable t) {
  28. resultText.setText(t.getMessage());
  29. }
  30. });

我会很感激你的帮助

aurhwmvo

aurhwmvo1#

错误说您的响应是对象,而您的java模型是列表,请替换api接口中的以下代码:

  1. Call<CovidSingleResult> getCovidData();

相关问题