Android应用程序开发和Web服务器交互

问题描述:

我刚刚了解Android开发,所以请原谅,如果这是有点关闭的性质。 我想创建一个与我的网站上的数据库进行交互的应用程序,从某种意义上说,这两件事会成为另一件事的一种。那就这样。我想弄清楚什么是与我的服务器交互的最佳方式。我不想要一个应用程序,这就像一个浏览器中的应用程序,我想开发一个完全独立于网站的应用程序,只需共享数据库和类似功能。那么,我最好的办法是什么?Android应用程序开发和Web服务器交互

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

只是在这里寻找意见和建议。我认为每个看到这个的人都熟悉Android的发展和最佳实践,尽可能地去浏览博客和所有其他的东西,但对于哪个最好,意见似乎是50/50。

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

然后,这是您的Android应用程序与RESTful API交互的问题,它仅仅是HTTP请求。这些可以封装在助手类中以使它们更直接。

+2

要与布莱恩同意。我开发了一个与数据库支持的网站一起工作的android应用程序。 (我们使用ROR)。我们只做RESTful API并使用JSON。如果你用JSON去,我会推荐GSON。我没有用内置的JSON android解析器的良好体验。就RESTful API而言,他们应该为你提供你所需要的。我们能够以与网站相同的方式与数据库完全互动。我使用android apache框架来处理HTTP请求,因为内置的一个不是很健壮。 http://code.google.com/p/google-gson/ http://hc.apache.org/downloads.cgi – daltoniam 2012-02-03 02:32:07

+0

apache框架和gson,我会把哪里..是这些东西驻留在我的Web服务器上工作,还是将这些东西包装在Android文件中,以备启动? – chris 2012-02-03 06:48:04

+0

这些会在你的Android应用程序作为外部库来链接。 – daltoniam 2012-02-12 22:51:27

根据我的经验,做事情REST风格与Android的最佳框架是:Spring Android

从客户的角度来看,它提供了访问安全RESTful服务所需的所有工具。由于它是Spring,它提供了对大多数锅炉板代码的很好的抽象。作为一个例子,它提供了一个干净的方式来执行返回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); 

我敢肯定,有库在那里为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中做你想要的数据。

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

我发现在Android端每次调用都有小的request/reponse类,比如SaveNoteToServerRequest,SaveNoteToServerResponse类,它们只是普通的java对象,其中任何字段都是请求/响应所需的。然后,您可以使用GSON这样的库将请求对象转换为JSON,并将http响应从JSON转换为响应对象。

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

这样,你不直接操纵JSON对象,大多数时候只使用自己的普通Java对象或PHP类。

希望有所帮助。