0

androidからfile1.phpを呼び出し、それがxml応答をandroidに送信し、その直後にfile1.phpからfile2.phpを呼び出します。また、file1.phpからfile2.phpに配列を送信したいと思います。androidはfile1からの応答のみを必要とするため、androidへの応答の送信を遅らせることなくこれを行うにはどうすればよいですか。ただし、file2入力はfile1の出力です。では、file1のxml出力をandroidに送信し、その直後にfile2を呼び出す方法はありますか?

詳細:Android:-> googlePlacesAPIを使用してレストランの近くに表示します。

File1.php:->近くのレストランのリストを取得して、GoogleがAPIを配置し、Androidに送信します。この直後に、File1.phpからFile2.phpを呼び出し、レストランの参照ID(File1のo / p)を送信して、各レストランの詳細を取得できるようにします。

Androidコード:

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);

File1.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

File2.php

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

主なことは、Androidはfile2の実行を開始する前に応答を受信する必要があるということです。

4

1 に答える 1

0

既存のリクエスト/レスポンス フローと並行して、外部の php ファイル (実際には新しい http リクエストを作成する) を実行することはできません。考えられる解決策は 2 つあります。

  1. サーバー (通常は DB の専用テーブル) にタスク キューを実装できるため、リクエストの処理中file1.phpに新しいタスクをキューに追加する必要があります。メインの Web サーバー プロセスと並行して、新しいタスクを探してバックグラウンドで処理する php "daemon" を常に実行しておく必要があります (必要な詳細は によって取得されますfile2.php)。タスクの準備ができたら (またはその一部、たとえば詳細を含む最初のレコードがいくつか利用可能になった場合)、キューで適切にマークします。Android アプリは定期的に新しい詳細をチェックし、別のアクセス ポイント (たとえばfile3.php) を使用してそれらをロードする必要があります。これは、部分的または完全に実行されたタスクから利用可能な詳細を返します。どのサーバー側フレームワークを使用しているか (もしあれば) はわかりませんが、それらのいくつかはに基づいて「バッチ ジョブ」を提供します。cron. ただし、これはそれほど簡単ではないように見えます。最も適切な方法は、プッシュ通知を使用することです。つまり、サーバーは、クライアントに既に送信されているリスト内のアイテムの新しい利用可能な詳細についてクライアントに通知する必要があります。

  2. 制御ロジックの一部を Android アプリに移動できます。このようにして、オブジェクトのリストをリクエストし、次にループ内でオブジェクトの詳細に関する新しいリクエストを送信します。このリクエストは、 によって Google プレイスにプロキシされますfile2.php。つまり、file2.phpサーバーではなくクライアントによって実行されます。

さらに、長いポーリングwebsocketsの実装にはるかに適しているNode.jsなど、php 以外のサーバー側ツールを検討する必要があります(いずれかを選択してください)。

于 2013-01-11T13:35:03.190 に答える