【问题标题】:Android App Development and Web Server InteractionsAndroid 应用程序开发和 Web 服务器交互
【发布时间】:2012-02-03 02:11:57
【问题描述】:

我只是在学习 Android 开发,如果这在本质上有点偏离,请原谅。 我想制作一个与我的网站上的数据库交互的应用程序,从某种意义上说,这两件事将是相互补充的。所以就这样。我试图找出与我的服务器交互的最佳方式。我不想要一个像浏览器一样的环境中的应用程序我想开发一个独立于站点工作的完整应用程序,只共享数据库和类似功能。那么我最好的方法是什么?

正在构建应用程序,以便它可以发布/获取服务器上的 php 文件,基本上通过 JSON/XML 进行交互,这是我最好和/或最安全的选择,或者是否有更好的方法将应用程序连接到不需要的服务器数据库我打开数据库到任何发出请求的 ip。

只是在这里寻找意见和建议。我认为每个将要看到这个的人都熟悉 Android 开发和最佳实践,我可以并且已经浏览过博客和其他所有内容,但关于哪个最好的意见似乎是 50/50。

【问题讨论】:

    标签: android web-services


    【解决方案1】:

    我确信有一些适用于 Android 的库可以帮助您使用 HTTP Get 和 Post,但是,如果您真的想了解发生了什么,那么您只需了解几个类即可自己上必要的课程。

    首先,了解HttpClient、HTTPGet、HTTPPost和HTTPResponse。一些更高版本的 Android 也有一些不错的其他类,但这四个几乎是您开始使用的全部。

    你需要做这样的事情:

    HttpClient client = new DefaultHttpClient();
    HttpGet request = new HttpGet("http://www.myurl.com/api_name");
    HttpResponse response = client.execute(request);
    

    如果您对此进行调试(当然使用真实的 URL),您会注意到您的应用程序在 client.execute() 期间冻结。这是请求实际触发并且应用程序正在等待响应的点。一旦你真正得到响应,从中获取数据并不难。

    一旦您了解了这一点,您就会想了解 AsyncTask,它对于执行后台任务非常有用。你可以在这里找到文档:http://developer.android.com/reference/android/os/AsyncTask.html 在顶部有一个很好的例子来说明如何使用它。

    结合使用这两个概念,您可以执行异步 HTTP 请求。基本上,将您的实际 HTTP 执行代码放在 AsyncTask 的 doInBackground 中。在 doInBackground 结束时返回您的响应,然后在 AsyncTask 的 onPostExecute 中对您的数据执行您想要的操作。

    【讨论】:

      【解决方案2】:

      我们发现,提供适当的 RESTful Web API,以您选择的任何语言(无论是 PHP、RoR 等)访问后端数据库,都可以为任意数量的用途(您自己的网站、移动设备)提供有用的界面应用程序等)。

      那么这就是您的 Android 应用与 RESTful API 交互的问题,这只是 HTTP 请求。也可以将它们封装在帮助类中以使其简单明了。

      【讨论】:

      • 同意布赖恩。我开发了一个与数据库支持的网站一起使用的 android 应用程序。 (我们使用 ROR)。我们只做 RESTful API 并使用 JSON。如果您使用 JSON,我会推荐 GSON。我对内置的 JSON android 解析器没有很好的体验。就 RESTful API 而言,它们应该能够满足您的需求。我们能够以与网站相同的方式与数据库进行完全交互。我对 HTTP 请求使用 android apache 框架,因为内置的框架不是很健壮。 code.google.com/p/google-gsonhc.apache.org/downloads.cgi
      • apache 框架和 gson 将我放在哪里.. 这些东西是驻留在我的 Web 服务器上可以使用的吗,或者这些东西是我在准备启动时包装在 android 文件中的东西?
      • 那些会在你的安卓应用上作为一个外部库链接。
      【解决方案3】:

      根据我的经验,用 Android 做 RESTFul 事情的最佳框架是:Spring Android

      从客户端的角度来看,它提供了访问安全 RESTFul 服务所需的所有工具。由于它是 Spring,它为大多数样板 http 代码提供了很好的抽象。例如,它提供了一种简洁的方式来执行返回 json 的 GET,然后将其序列化为 POJO。

      举个例子:

      RestTemplate restTemplate = new RestTemplate();
      
      // Add Jackson JSON Message Converter to Template
      restTemplate.setMessageConverters(
          new ArrayList<HttpMessageConverter<?>>() {
              {              
                  add(new MappingJacksonHttpMessageConverter());
              }
          }
      );  
      
      // Simple Conversion - pojo is now populated
      MyPojo pojo = restTemplate.getForObject(url, MyPojo.class);
      

      【讨论】:

        【解决方案4】:

        您在问题中提到的方法:服务器上的 PHP 和请求/响应的 JSON 确实有效。但要做到完美可能会很棘手。

        我发现在 Android 端为每个调用设置小的请求/响应类很有帮助,例如 SaveNoteToServerRequest、SaveNoteToServerResponse 类,它们只是普通的 java 对象,包含请求/响应所需的任何字段。然后你可以使用像GSON这样的库将请求对象转换为JSON,并将http响应从JSON转换为响应对象。

        在 PHP 方面,您可以为响应对象创建一个小类,然后在末尾创建 json_encode。

        这样你就不会直接操作 JSON 对象,大部分时间只是使用你自己的普通 java 对象或 php 类。

        希望对您有所帮助。

        【讨论】:

          猜你喜欢
          • 2012-02-25
          • 1970-01-01
          • 2012-11-15
          • 1970-01-01
          • 2014-01-01
          • 2019-05-19
          • 2011-02-11
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多