我刚刚学习Android开发,请原谅我,如果这有点偏。 我想创建一个与我的网站上的数据库交互的应用程序,从某种意义上说,这两个东西将是另一个。就这样。我想弄清楚什么是与我的服务器交互的最佳方式。我不想要一个应用程序在浏览器中的应用程序,如环境,我想开发一个完全的应用程序,独立于仅共享数据库和类似功能的网站。那么最好的方法是什么?
正在构建应用程序,以便它可以发布/获取服务器上的php文件,基本上通过JSON / XML交互我最好和最安全的赌注,或者有更好的方法将App连接到服务器不需要的数据库我打开数据库到任何提出请求的ip。
只是在这里寻找意见和建议。我认为每个看到这个的人都熟悉Android开发和最佳实践,尽可能地浏览博客和其他所有内容,但是对于最好的看法似乎是50/50。
答案 0 :(得分:4)
我确信有适用于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中对您的数据执行您想要的操作。
答案 1 :(得分:3)
我们发现提供一个适当的RESTful Web API,无论您选择何种语言(无论是PHP,RoR还是其他语言),它都可以在后端点击数据库,为任意数量的用户提供有用的界面(您自己的网站,移动设备)应用程序等)。
然后,这是你的Android应用程序与RESTful API交互的问题,这只是HTTP请求。这些可以封装在辅助类中,使它们也很简单。
答案 2 :(得分:0)
根据我的经验,使用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);
答案 3 :(得分:0)
您在问题中提到的方法:服务器上的PHP和请求/响应的JSON确实有效。但要完善它可能会很棘手。
我发现在Android端为每个调用提供小的请求/响应类很有帮助,比如SaveNoteToServerRequest,SaveNoteToServerResponse类,它们只是普通的java对象,包含请求/响应所需的任何字段。然后,您可以使用像GSON这样的库将请求对象转换为JSON,并将http响应从JSON转换为响应对象。
在PHP方面,你可以为响应对象创建一个小类,然后在最后创建json_encode。
这样你就不会直接操作JSON对象,只是在大多数情况下只使用你自己的普通java对象或php类。
希望有所帮助。