0

一見単純な質問ですが、オンラインで明確な答えが見つかりません。

このリンクには、単純な名前と値のペアを Android アプリ内からファイルに投稿するためのチュートリアルがあります。http://www.androidsnippets.com/executing-a-http-post-request-with-httpclient

私がやりたいのは、受信側 (php スクリプト) で配列としてアクセスできる「何か」を投稿することです。

PHPで受け取りたい:

$_POST['array']=array("key"=>"value","key2"=>"value2");

アンドロイド開発に比較的慣れていないので、おそらく誰かがJavaで同様のものを作成することについて詳しく説明することができ、それを送信できない方法-setEntityは名前と値のペアしかとらないようです...

どうもありがとう

4

2 に答える 2

4

Android アプリと PHP サーバーの両方で JSON ラッパーを使用する必要があります。

PHP では、次json_decode()のように を使用する必要があります$thingFromPost = json_decode($data)

Java では、JSONArray を作成する方法が多数あります。基本的な例は次のとおりです。

List<String> list = new ArrayList<String>();
list.add("foo");
list.add("bar");
JSONArray jsonArray = new JSONArray(list);

その後、配列を HttpPost とともにサーバーに送信するだけです。

StringEntity stringEntity = new StringEntity(jsonArray.toString());
stringEntity.setContentEncoding(new BasicHeader(HTTP.CONTENT_ENCODING, "UTF-8"));
stringEntity.setContentType(new BasicHeader(HTTP.CONTENT_TYPE, "application/json"));

HttpPost post = new HttpPost(url);          
post.setEntity(stringEntity);
post.setHeader(new BasicHeader(HTTP.CONTENT_TYPE, "application/json"));

Android で JSON を使用してリクエストを行う方法の詳細なチュートリアルが必要な場合は、このリンクに従ってください。

それが役に立てば幸い!

于 2012-12-12T23:04:42.930 に答える
0

POSTの生の本体全体を文字列化された配列(その他は何も)にしたくない場合は、UrlEncodedFormEntityの代わりにStringEntityを使用する必要があると思います。

したがって、この:

String s = "asdf"; // replace this with your JSON string
StringEntity stringEntity = new StringEntity(s);
httpPost.setEntity(stringEntity);

私はPHPに精通していませんが、概念的には受信側でjson.parse(request.full_body)のようなことをします。これ(request.full_bodyまたは同等のもの)は、request['input_field1']のようなPOSTフォームの単一の値をフェッチする一般的なパターンとは大きく異なることに注意してください。

しかし、あなたの質問を読んで、私はこのfull_bodyアプローチがあなたが望むものであるかどうか完全に確信していません。ここに示すように、フォーム変数「配列」を介してデータにアクセスしたいように見えます。

$ _POST ['array'] = array( "key" => "value"、 "key2" => "value2");

ここではPOST本体全体を操作しているのではなく、「配列」と呼ばれる単一のフォーム変数の値をフェッチしていることに注意してください(PHPについてはよくわかりません)。この場合は、次のようにNameValuePairsを使用する必要があります。

List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
nameValuePairs.add(new BasicNameValuePair("array", yourJSONArrayAsString));

これにより、配列がフォーム変数'array'に関連付けられた値として投稿されます。

于 2012-12-13T00:21:48.733 に答える