android - 将 arraylist 从 servlet 发送到 Android 应用程序

标签 android servlets

如何将数组列表从 servlet 发送到 Android 应用程序?

最佳答案

至此,您需要将其转换为某种标准格式的 String,然后可以使用现有库对其进行解析和构建。例如,JSON、XML 或 CSV,它们都是标准化的和可交换的字符串格式,在许多编程语言中存在大量解析/构建库。

Android 在 the org.json package 中有一个内置的 JSON 解析器.它甚至在 the org.xml.sax package 中有一个内置的 XML 解析器。 .我不确定是否有内置的 CSV 库,但似乎没有。 Java EE 具有 JAXB 的风格一个很棒的内置 XML 解析器,但它没有内置的 JSON 解析器。只有 JAX-RS 实现(Jersey、RESTeasy 等)提供 JSON 解析器。如果您可以将您的 servlet 更改为 JAX-RS web 服务,那么您将受益于能够以非常小的努力返回 XML 和 JSON。另见 Servlet vs RESTful .

选择哪种格式取决于唯一的功能需求。例如,servlet 是否应该被其他服务重用?目标客户是什么?等等。

无论如何,JSON 格式通常比 XML 更简洁,最近更流行,所以我将给出一个以 JSON 格式传输数据的启动示例,我假设您真的想这样做使用普通的 vanilla servlet 而不是 JAX-RS。对于此示例,您只需要下载并删除一个 JSON 库,例如 Gson/WEB-INF/lib 中,以便在 servlet 中将 Java 对象转换为 JSON。

@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    List<String> list = new ArrayList<String>();
    list.add("item1");
    list.add("item2");
    list.add("item3");
    String json = new Gson().toJson(list);

    response.setContentType("application/json");
    response.setCharacterEncoding("UTF-8");
    response.getWriter().write(json);
}

这将构建并返回以下 JSON 格式的 List:

["item1","item2","item3"]

这又可以通过 Android 中的 org.json API 进行解析,如下所示:

String jsonString = getServletResponseAsStringSomehow(); // HttpClient?
JSONArray jsonArray = new JSONArray(jsonString);
List<String> list = new ArrayList<String>();

for (int i = 0; i < jsonArray.length(); i++) {
    list.add(jsonArray.getString(i));
}

// Now you can use `list`.

关于android - 将 arraylist 从 servlet 发送到 Android 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8292815/

相关文章:

javascript - 在未识别的 native react 中导入 ES 模块

java - 通过URI获取内容

java - Grails 中的 servletContext 在哪里可用?

java - 阻碍android应用程序的反编译?

security - https页面访问非https资源

java - 适当使用一个servlet?

java - Servlet 给出 404 而不是加载适当的页面。控制台在启动 Tomcat 时显示严重错误

android - 在 Android 中将 JPEG 图像保存为视频

java - Java (Android) 中的 UDP 客户端,用于从 X-Plane 12 获取数据

android - SoundCloud API 有配额限制吗?