【问题标题】:Send arraylist from servlet to Android application将数组列表从 servlet 发送到 Android 应用程序
【发布时间】:2012-01-07 17:36:04
【问题描述】:

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

【问题讨论】:

    标签: android servlets


    【解决方案1】:

    到此为止,您需要将其转换为某种标准格式的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 格式传输数据的启动示例,我会假设您真的想要这样做使用普通的 servlet 而不是 JAX-RS。对于此示例,您只需要下载一个 JSON 库,例如 Gson 并将其放入 /WEB-INF/lib,以便将 Java 对象转换为 servlet 中的 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`.
    

    【讨论】:

    • 我意识到这是超级旧的,但它非常有帮助,我想我还是会写信询问我遇到的问题。我正在尝试使用上面的代码示例编译一个 servlet,但我收到“错误:找不到符号 | String json = new Gson() 等”(箭头指向 Gson)。我不知道要包含什么库,所以我同时使用了 gson-2.2.3.jar 和 gson-2.2.3-sources.jar 有什么问题?
    • @Christofer:将 JAR 放到 /WEB-INF/lib 文件夹中。将源 JAR 保存在它之外。仅用于 IDE 中的“附加源”按钮。或者,如果您使用javac 命令行工具而不是IDE 进行编译,请将/WEB-INF/lib fodler 中的JAR 添加到-cp-classpath 参数。
    • 我想,我现在可以通过添加一个 import com.google.gson.Gson 语句来实现它。也许我应该意识到这是必要的:) 我正在通过命令行编译,顺便说一句。我实际上将 jar 文件放在项目的 WEB-INF/lib 以及 Tomcat 服务器的 lib 中。也许这很愚蠢?
    【解决方案2】:

    如果它是基于拉取的模型,您可以将 HTTP GET 请求从您的 android 应用程序发送到 servlet 端点,并且 HTTP 响应可以是从数组列表创建的 JSON 对象。

    【讨论】:

      猜你喜欢
      • 2013-04-23
      • 1970-01-01
      • 1970-01-01
      • 2012-05-29
      • 1970-01-01
      • 2012-08-15
      • 2017-01-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多