使用 Retrofit 转换 json 数组?

2023-11-21

这是我的 Json

[  
{  
  "nata_center":{  
     "id":67,
     "nata_center_name":"Primo Institute of Design"
  }
 },
{  
  "nata_center":{  
     "id":68,
     "nata_center_name":"Sai Ganesh Institute"
  }
 }
]

Pojo 类

public class Explorer {
    NataCenter nataCenter;

    public NataCenter getNataCenter() {
        return nataCenter;
    }

    public void setNataCenter(NataCenter nataCenter) {
        this.nataCenter = nataCenter;
    }
}

2)

public class NataCenter {
    public String id;
    public String nata_center_name;

     public NataCenter(String id,String nata_center_name)
     {
      this.id=id;
     this.nata_center_name=nata_center_name;
     }

    public void setId(String id) {
        this.id = id;
    }

    public String getId() {
        return id;
    }

    public String getNata_center_name() {
        return nata_center_name;
    }

    public void setNata_center_name(String nata_center_name) {
        this.nata_center_name = nata_center_name;
    }
}

获取方法改进

void getCenter(@Query("id") int id,Callback<List<Explorer>> callback);

MainActivity.java

       service.getCenter(i,new Callback<List<Explorer>>() {
                        @Override
                        public void success(List<Explorer> o, Response response) {
                            Log.d(TAG,"Success" + "Response"+o.toString());

                        @Override
                        public void failure(RetrofitError error) {
                            Log.d(TAG,"Failed"+error.toString());

                        }
                    });

这是错误消息

 Failedretrofit.RetrofitError: com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2 path $

基本上问题是你将数组作为 json 中的根。您必须创建将用作该列表的容器和该对象的反序列化器的对象。我使用资源管理器作为容器,如下所示:

public class Explorer {

    List<NataCenter> nataCenter;


    public List<NataCenter> getNataCenter() {
        return nataCenter;
    }

    public void add(NataCenter nataCenterItem){
        if(nataCenter == null){
            nataCenter = new LinkedList<>();
        }
        nataCenter.add(nataCenterItem);
    }
}

我的解决方案只是解释。你可以改善你的Explorer班级。列表的设置器不是最好的主意。

NataCenter 类看起来像以前的,

重要的想法之一是ExplorerDeserializerJson班级。它用于反序列化json,如下所示:

public class ExplorerDeserializerJson implements JsonDeserializer<Explorer> {

    @Override
    public Explorer deserialize(JsonElement je, Type type, JsonDeserializationContext jdc)
            throws JsonParseException {
        Explorer explorer = new Explorer();
        JsonArray jsonArray = je.getAsJsonArray();
        Gson gson = new Gson();
        for(JsonElement element : jsonArray){
            JsonObject jsonObject = element.getAsJsonObject();
            NataCenter nataCenter = gson.fromJson(jsonObject.get("nata_center"), NataCenter.class);
            explorer.add(nataCenter);
        }
        return explorer;

    }
}

另外我改变了你的客户。现在Explorer是一个回应。

void getCenter(@Query("id") int id,Callback<Explorer> callback);

最后,您必须在创建 RestAdapter 的位置注册新的反序列化器,如下所示:

 RestAdapter restAdapter = new RestAdapter.Builder()
                   .setEndpoint(BuildConfig.IP)
                    .setConverter(new GsonConverter(new GsonBuilder()
                            .registerTypeAdapter(Explorer.class, new ExplorerDeserializerJson())
                            .create()))
                    .build();
            restAdapter.create(CenterClient.class).getCenter(1);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Retrofit 转换 json 数组? 的相关文章

随机推荐

  • ILogger 不尊重 Application Insights 的日志级别

    我一直在尝试使用 ASP NET Core 2 0 应用程序设置 Application Insights 在本地运行我的应用程序时 日志按预期显示在 Application Insights 中 但是 当部署到 Azure 应用服务时 虽
  • 使用 Prophet 时,“StanModel”对象没有属性“fit_class”

    我正在尝试使用先知 我已经安装了所有必需的软件包 pip install pandas numpy jupyterlab seaborn conda install pywin32 conda install c anaconda pyst
  • Delphi 2010 密码学库 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 你能推荐一个开源的 Delphi 加密库吗 德尔福 2006 德尔福 2009 和德尔福 2010 算法需要 DES MD5 SHA 1 以下是我在
  • 我应该使用属性还是 getter 和 setter?

    我知道在 python 中使用 getter 和 setter 不是 pythonic 相反 应该使用属性装饰器 但我想知道以下场景 我有一个使用一些实例属性初始化的类 然后我需要向类添加其他实例属性 如果我不使用设置器 那么我必须写obj
  • Javascript:如何转换数组?

    我在 javascript var 上有这个 这是一个 http 返回的数据 我不知道它是数组还是字符串 我们如何才能看到它 更新 使用 typeof 返回 字符串 所以它是一个字符串 nomeDominio gggg fa nomeDom
  • ImageMagick 或 GhostScript:将多页 TIFF 转换为多页 PDF

    我需要将多页 TIFF 转换为多页 PDF 我可以访问 ImageMagick 和 GhostScript 在 nix 环境中 我该怎么做呢 谢谢 UPDATE 事实证明我的测试文件是错误的 它没有多个页面 这让我认为我的命令是错误的 这似
  • Postgres 视图的 Django 模型

    Edit 我的要求似乎有些混乱 该模型适用于Postgres 视图我在迁移 0009 中创建的 我的印象是 Django 不会为模型生成迁移 如果它具有managed False选项 然而 它仍在尝试创建它 另外 我使用 Django 1
  • JSP - 使用 Apache Commons 上传文件

    为什么我的文件上传代码不起作用 我正在使用 commons fileupload 1 1 1 jar 另外 我在 NetBeans 6 1 中的 isMultipartContent 第二行中看到了删除线 Check that we hav
  • 纬度和经度错误 - Google Maps API JS 3.0

    一段时间后 谷歌地图似乎将属性名称 Qa或Pa 更改为Na或其他名称 var map function initialize var myLatlng new google maps LatLng 25 363882 131 044922
  • 设置 Canvas.LineTo 的线端样式

    有没有办法为 TCanvas LineTo 方法设置 lineends 的样式 它似乎默认为圆角末端 当 Pen Width 设置为较大值 例如 9 时 对于不同颜色的行中的多条线来说 这看起来非常糟糕 它看起来像这样 圆角末端 其中 代表
  • postgresqlNewConnection(drv, ...) RS-DBI 驱动程序中出现错误:(无法在 dbname 上连接 postgres@local

    我是新来的R我正在尝试使用 RStudio 连接到 PostgreSQL 我已经安装了RPostgreSQL并尝试了以下代码 gt library DBI lib loc R win library 3 2 gt library RPost
  • 部署到已在 IntelliJ IDEA 外部运行的 Tomcat 服务器

    我已经在我的 PC 上安装了 Tomcat 服务器 并将其添加为service在Windows中 所以现在每次我启动计算机时它都会启动 现在 在 IntelliJ 中我已经配置了一个应用程序服务器 那就是我的 Tomcat 服务器 但是当尝
  • 如何减少 Visual Studio 2015 中 Xamarin Forms 应用程序的用户代码大小?

    我今天在 Windows 7 上安装了 Visual Studio 2015 RTM 并在 Xamarin 上注册了一个新帐户 入门许可证 创建项目后 我尝试运行该应用程序 之前创建的 AVD 我得到的只是这个错误 mandroid 错误
  • 在 werkzeug 请求中检索 url 锚点

    我有一个 DAV 协议 可以在 url 锚点中存储带外数据 例如这ghi in DELETE abc def ghi 服务器是 Flask 应用程序 我可以看到请求通过网络传入tcpdump 但是当我查看 werkzeug Request
  • 如何使用Spark的repartitionAndSortWithinPartitions?

    我正在尝试构建一个最小的工作示例repartitionAndSortWithinPartitions以便理解该函数 到目前为止我已经完成了 不起作用 不同的值会乱七八糟地乱七八糟 def partval partID Int iter It
  • Python:使用相对路径导入excel文件

    我尝试导入一个与脚本不在同一文件夹中的 Excel 文件 我需要获取上面的一个文件夹 然后进入另一个文件夹 B folder 并且有文件 2 file xlsx I tried df pd read excel r B folder 2 f
  • 如何在Java小程序中正确指定代码库和存档?

    我使用 Firefox 版本 gt 3 5 3 5 3 6 4 我尝试指定archive and codebase属性正确但不起作用 我的小程序主类位于archive运行时加载的一些必要的类位于codebase 如果我只指定archive然
  • SDL_GetTicks() 精度低于毫秒级

    我目前使用 SDL2 进行编程 一切正常 但我有一个问题SDL GetTicks 方法 通常它应该返回以毫秒为单位的总应用时间 但大多数时候它总是返回值 0 有时返回值 1 我用以下命令初始化了 SDLSDL INIT EVERYTHING
  • 使用 Eclipse CDT 构建多模块 C 项目(即解决方案)

    我将从 Netbeans 迁移到 Eclipse 在 Ubuntu 12 0 4 上 我有一个 C 应用程序 它由几个子项目组成 这些子项目是库 共享和静态 以及独立的可执行文件 我不知道如何创建 父 项目foo 其中包含组件项目 foob
  • 使用 Retrofit 转换 json 数组?

    这是我的 Json nata center id 67 nata center name Primo Institute of Design nata center id 68 nata center name Sai Ganesh Ins