繁体   English   中英

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

[英]Android App Development and Web Server Interactions

我只是在学习Android开发,因此,如果这本质上有点偏离,请原谅。 从某种意义上讲,我想做一个与我的网站与数据库交互的应用程序,从某种意义上说,这两件事将相互促进。 因此。 我试图找出什么是与服务器交互的最佳方法。 我不希望这样的应用程序在类似浏览器的环境中使用,我希望开发一个完整的应用程序,该应用程序独立于站点而仅共享数据库和类似功能。 那么我最好的方法是什么?

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

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

我确定有很多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中的数据执行所需的操作。

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

然后,这就是您的Android应用程序与RESTful API(仅是HTTP请求)进行交互的问题。 可以将它们封装在帮助器类中,以使其变得简单明了。

根据我的经验,使用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);

您在问题中提到的方法是可行的:服务器上的PHP和用于请求/响应的JSON。 但是,使其变得完美可能会很棘手。

我发现为Android端的每个调用设置较小的请求/响应类很有帮助,例如SaveNoteToServerRequest,SaveNoteToServerResponse类,它们都是纯Java对象,具有请求/响应所需的任何字段。 然后,您可以使用GSON之类的库将请求对象转换为JSON,并将http响应从JSON转换为响应对象。

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

这样,您就不会直接操纵JSON对象,而是大多数时候仅使用自己的纯java对象或php类。

希望有所帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM