-1

http get メソッド呼び出しを使用して java から php に変数値を渡す方法を知っていますが、get call を介して java から php に配列を渡す方法がわかりません。

HttpGet httpGet = new HttpGet("http://localhost/browserHistory.php?mobile_number="+mob+"&arr="+myArray);
  HttpClient client = new DefaultHttpClient();
  client.execute(httpGet);

私はこのようにphpで読み込もうとしています:

    $history = $_GET["arr"];
    $result = count($history);
    echo ""+$result;

結果は常に 1 を出力します。

4

2 に答える 2

1

HTTP を使用すると、テキストを送信できます。配列をテキストで表現する必要があります。これは、何らかの方法でエンコードする必要があることを意味します。

HTML フォームからデータを送信する場合、データは としてエンコードされapplication/x-www-form-urlencodedます。その形式でデータの配列を表す通常の方法は、データの複数のコンポーネントに同じ名前を付けることです。PHP では、より複雑なデータ構造を表すことができますが、その単純さは失われます。名前は で終わる必要があるというルールが追加され[]%5B%5Dエンコードすると になります。

example.php?foo%5B%5D=1&foo%5B%5D=2

これにより、 にデータの配列が得られます$_GET['foo'][]

または、別のデータ形式にシリアル化し、それをエンコードすることもできます。JSONは一般的な選択肢です。

JSON の同じデータは次のようになります。

[1,2]

JSON ライブラリを使用して生成します。文字列をマッシュアップして JSON を構築しないでください。

次に、それを次のようにエンコードできapplication/x-www-form-urlencodedます。

example.com?foo=%5B1%2C2%5D

PHP でデコードします。

$array = json_decode($_GET['foo']);
于 2013-03-19T07:39:02.307 に答える
0

body をGETリクエストに含めることができます (仕様で明示的に禁止されてHTTPいるわけではありません) が、これは良い方法でGETはありません。サーバーにデータを送信するために使用するためのものではありません。

そのため、代わりに使用することを検討するPOSTか、配列が小さい場合はシリアル化してクエリ文字列に投稿します。

POSTAndroid で送信するには:

String data[] = { "String1", "String2" };
JSONArray arr = new JSONArray(Arrays.asList(data));

DefaultHttpClient httpclient = new DefaultHttpClient();

// Put correct URL of your web service.
HttpPost post = new HttpPost("http://example.com");

post.setEntity(new StringEntity(arr.toString()));

HttpResponse response = httpclient.execute(post);
于 2013-03-19T07:39:58.833 に答える