0

我从android调用file1.php,我希望它向android发送xml响应,然后立即从file1.php调用file2.php。我还想将一个数组从 file1.php 发送到 file2.php。如何在不延迟向 android 发送响应的情况下做到这一点,因为 android 只需要来自 file1 的响应。但是 file2 的输入是 file1 的输出。那么有没有一种方法可以将file1的xml输出发送到android,然后立即调用file2?

详细信息:Android :-> 使用 google places api 显示附近的餐馆。

File1.php :-> 获取附近餐厅的列表 google places api 并将其发送到 android。紧接着,我想从 File1.php 调用 File2.php,在其中发送餐厅的参考 ID(File1 的 o/p),以便我可以获取每个餐厅的详细信息。

安卓代码:

ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
            nameValuePairs.add(new BasicNameValuePair("latitude",latt));
            nameValuePairs.add(new BasicNameValuePair("longitude", longi));

            DefaultHttpClient httpClient = new DefaultHttpClient();
            HttpPost httpPost = new HttpPost("http://www.xyz.com/file1.php");

            httpPost.setEntity(new UrlEncodedFormEntity      (nameValuePairs));

            HttpResponse httpResponse = httpClient.execute(httpPost);

            HttpEntity httpEntity = httpResponse.getEntity();
            line = EntityUtils.toString(httpEntity);

文件1.php

 $url = 'https://maps.googleapis.com/maps/api/place/search/xml?....';
 //get xml response and send it to android

//call file2.php and send reference id's so as ot get each restaurant details

文件2.php

for(each restaurant)
//get details and do some back end processing.

主要是android应该在file2开始执行之前收到响应。

4

1 回答 1

0

您不能与现有的请求-响应流并行执行外部 php 文件(实际上是创建一个新的 http-request)。存在两种可能的解决方案。

  1. 您可以在服务器上实现任务队列(通常是数据库中的专用表),因此在处理请求时,file1.php您应该在队列中添加新任务。与主 Web 服务器进程并行,您应该有一个始终运行的 php“守护程序”,它查找新任务并在后台处理它们(通过 获取所需的详细信息file2.php)。一旦任务准备就绪(或其中的一部分,例如有几条带有详细信息的第一条记录可用),请在队列中适当地标记它。Android 应用程序应定期检查新的详细信息并使用另一个访问点(例如file3.php)加载它们,该访问点从部分或完全执行的任务中返回可用的详细信息。我不知道您使用哪个服务器端框架(如果有的话),但其中一些提供基于cron. 不过,这看起来并不容易。最合适的方法是使用推送通知,即服务器应通知您的客户端有关列表中已发送给客户端的项目的新可用详细信息。

  2. 您可以将部分控制逻辑移动到 Android 应用程序中。通过这种方式,它请求对象列表,然后在循环中发送对象详细信息的新请求,这些请求通过file2.php. 换句话说,file2.php由客户端而不是服务器执行。

此外,您可能应该查看除 php 之外的一些服务器端工具,例如Node.js,它更适合实现长轮询websockets(选择其中之一)。

于 2013-01-11T13:35:03.190 回答