当前位置: 首页 > 知识库问答 >
问题:

改装2.0.0 beta2:预期begin_array但begin_object

公羊向荣
2023-03-14

我每次都会收到这个错误:预期的begin_数组,但它是begin_对象。我不知道我是否需要添加反序列化程序或warrper类来进行改造,但我不知道如何以简单的方式来满足我所有项目的api json响应,下面是我的改造代码:

-

我的Json:

{
  categoryDetails: [

    {
      id: "1",
      categoryName: "Fashion"
    },
    {
      id: "2",
      categoryName: "Pets"
    },
    {
      id: "3",
      categoryName: "Sports"
    },
    {
      id: "4",
      categoryName: "Autre1"
    },
    {
      id: "5",
      categoryName: "Autre2"
    }
  ]
}

我的源代码

import java.util.List;
import java.io.IOException;
import java.util.List;
import android.util.Log;
import retrofit.Call;
import retrofit.GsonConverterFactory;
import retrofit.Retrofit;
import retrofit.http.GET;
import retrofit.http.Path;

public class GitHubClient {

     public static final String API_URL = "http://192.168.1.22";


      public static class Category {
        public final String categoryName;
        public final int id;

        public Category(String categoryName, int id) {
          this.categoryName = categoryName;
          this.id = id;
        }
      }
/*-----------------------------------------------------------------------------------------------------------*/
      public interface QampaAPI {
        @GET("/api/category")
        Call<List<Category>> categoryDetailss();
      }
 /*-----------------------------------------------------------------------------------------------------------*/     

      public static void main(String... args) throws IOException {

           Log.w("retrofit","main()");
        // Create a very simple REST adapter which points the GitHub API.
        Retrofit retrofit = new Retrofit.Builder()
            .baseUrl(API_URL)
            .addConverterFactory(GsonConverterFactory.create())
            .build();

        // Create an instance of our GitHub API interface.
        QampaAPI apiCall = retrofit.create(QampaAPI.class);

        // Create a call instance for looking up Retrofit categoryDetailss.
        Call<List<Category>> call = apiCall.categoryDetailss();

        // Fetch and print a list of the categoryDetailss to the library.
        List<Category> Categorys = call.execute().body();

        for (Category Category : Categorys) {
          Log.w("retrofit",Category.categoryName + " (" + Category.id + ")");
        }


      }

}

共有2个答案

章安易
2023-03-14

你是对的,你需要一个包装类来处理外部对象-

static class CategoryDetails {
     List<Category> categoryDetails;
     // add getter and setter
}

更新您的接口以使用此对象-

public interface QampaAPI {
    @GET("/api/category")
    Call<CategoryDetails> categoryDetailss();
}

你的电话呢--

Call<CategoryDetails> call = apiCall.categoryDetailss();
CategoryDetails details = call.execute().body();

您需要从详细信息对象内部访问该列表来迭代它。

齐兴运
2023-03-14

根据错误状态,您的JSON响应与您创建的类不匹配。试试下面的POJO课程

public static class Category { 
public final List<CatergoryItem> categoryItem;

    public Category(List<CategoryItem> item) {
      this.categoryItem = item;
    }

  }
class CategoryItem{
 public String categoryName;
    public int id;
 //getter..setter 
}
 类似资料:
  • 我做了一个功能:输入身份证号码,点击提交按钮,然后获得身份证的基本信息。 我使用的模型是: 我使用的改装界面: 当我输入正确的身份证号码时,一切正常。返回的结果是: 一切运作良好。 然而,当我输入不正确的身份证号码时,不好的事情发生了: 返回的结果是: 我怎样才能修复这些漏洞?

  • 我不熟悉GSON和改装,这是我的输出模型(仅供参考结构), 这是我的输出 这是我的改装代码 应为BEGIN_对象,但为BEGIN_数组“ 我尝试过用List替换RootObject

  • 我正在通过改型和RXAndroid与来自android的REST API进行交互,我遇到了一个问题。 当我向我的“api/users/{id}/{id}/classes”发送GET请求时,我的api会以用户类列表作出响应,如下所示: 我的界面如下所示: 我从片段中这样称呼它: 我的类对象以及getter和setter如下所示: gson不应该看到“类”:[]数组并从中解析对象吗?我做错了什么

  • 我的Retrofit2调用出现以下异常: 学分类别:

  • 我试图使用改型在一些解析的JSON上执行一些代码,但是我得到了一个非法的状态异常。以下是我的改装实例: Coinbase Pro API接口: 对服务器的调用请求(这是导致错误的原因): 最后是JSON解析成的类对象: 因此,根据我从类似文章中收集的信息,发生非法状态异常是因为我试图传递给Gson的对象的类型不正确。但我不明白这是怎么回事,因为我正在使用改装;GsonConverterFactor

  • 问题内容: 我在列表中仅收到一个项目时收到此错误。我在服务器端REST Web服务中使用Jersey,当List返回一个元素并且当我得到它时,我仅收到错误,但是当它包含多个元素时,它可以正常工作,这就是我的工作方式它: 为什么Jersey不发送包含一个项目的列表?这是球衣的虫子吗?有没有办法使它始终序列化为数组? 当Web服务返回0元素时,这是我的JSON数据: 当Web服务返回1元素时,这是我的