[解決済み] AndroidでHTTPClientを使用してJSONでPOSTリクエストを送信するには?
質問
HTTPClientを使用してAndroidからJSONをPOSTする方法を見つけようとしています。しばらくこれを理解しようとしていて、オンラインで多くの例を見つけましたが、どれも動作させることができません。 これは、私が一般的にJSONやネットワークの知識が不足しているためだと思います。 たくさんの例があることは知っていますが、どなたか実際のチュートリアルを紹介していただけませんか?私は、コードと、各ステップを実行する理由、またはそのステップが行うことの説明を含む、ステップバイステップのプロセスを探しています。それは複雑である必要はなく、シンプルであれば十分です。
もう一度言いますが、そこに大量の例があることを知っています。私はただ、正確に何が起こっていて、なぜそのようにやっているのかの説明のある例を本当に探しています。
もし誰かがこれに関する良い Android の本について知っていたら、教えてください。
また、ヘルプ@terranceありがとうございます。以下、私が説明したコードです。
public void shNameVerParams() throws Exception{
String path = //removed
HashMap params = new HashMap();
params.put(new String("Name"), "Value");
params.put(new String("Name"), "Value");
try {
HttpClient.SendHttpPost(path, params);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
どのように解決するのですか?
この回答では、私は の例では、Justin Grammensによって投稿された .
JSONについて
JSONとは、JavaScript Object Notationの略です。JavaScriptでは、プロパティは次のように両方参照することができます。
object1.name
といった具合に参照できます。
object['name'];
. 記事の例では、このようなJSONのビットを使用しています。
部品
emailをキー、[email protected] を値とするファンオブジェクト。
{
fan:
{
email : '[email protected]'
}
}
つまり、オブジェクトに相当するものは次のようになります。
fan.email;
または
fan['email'];
. どちらも同じ値を持つ
の
'[email protected]'
.
HttpClientのリクエストについて
以下は、筆者が使っていた HttpClient リクエスト . 私はこのすべての専門家であると主張しないので、誰かが用語のいくつかを表現するためのより良い方法を持っている場合は、自由に感じなさい。
public static HttpResponse makeRequest(String path, Map params) throws Exception
{
//instantiates httpclient to make request
DefaultHttpClient httpclient = new DefaultHttpClient();
//url with the post data
HttpPost httpost = new HttpPost(path);
//convert parameters into JSON object
JSONObject holder = getJsonObjectFromMap(params);
//passes the results to a string builder/entity
StringEntity se = new StringEntity(holder.toString());
//sets the post request as the resulting string
httpost.setEntity(se);
//sets a request header so the page receving the request
//will know what to do with it
httpost.setHeader("Accept", "application/json");
httpost.setHeader("Content-type", "application/json");
//Handles what is returned from the page
ResponseHandler responseHandler = new BasicResponseHandler();
return httpclient.execute(httpost, responseHandler);
}
地図
をよく知らない人は
Map
のデータ構造に馴染みがない場合は
Java Map リファレンス
. 簡単に言うと、マップは辞書やハッシュと同じようなものです。
private static JSONObject getJsonObjectFromMap(Map params) throws JSONException {
//all the passed parameters from the post request
//iterator used to loop through all the parameters
//passed in the post request
Iterator iter = params.entrySet().iterator();
//Stores JSON
JSONObject holder = new JSONObject();
//using the earlier example your first entry would get email
//and the inner while would get the value which would be '[email protected]'
//{ fan: { email : '[email protected]' } }
//While there is another entry
while (iter.hasNext())
{
//gets an entry in the params
Map.Entry pairs = (Map.Entry)iter.next();
//creates a key for Map
String key = (String)pairs.getKey();
//Create a new map
Map m = (Map)pairs.getValue();
//object for storing Json
JSONObject data = new JSONObject();
//gets the value
Iterator iter2 = m.entrySet().iterator();
while (iter2.hasNext())
{
Map.Entry pairs2 = (Map.Entry)iter2.next();
data.put((String)pairs2.getKey(), (String)pairs2.getValue());
}
//puts email and '[email protected]' together in map
holder.put(key, data);
}
return holder;
}
この投稿について生じた疑問、私が何かを明確にしていない場合、またはあなたがまだ混乱している何かに私が触れていない場合など、本当に頭に浮かんだことなら何でもコメントしてください。
(Justin Grammens が承認しない場合、私は削除します。しかし、そうでない場合は、それについて冷静であることのためにJustinに感謝します)。
更新情報
たまたまコードの使い方についてコメントをもらって、戻り値の型に間違いがあることに気づきました。 メソッドのシグネチャは文字列を返すように設定されていましたが、この場合、何も返しませんでした。私はシグネチャを をHttpResponseに変更し、このリンクを参照することにしました。 HttpResponseのレスポンスボディを取得する は、path変数がurlで、コードの間違いを修正するために更新しました。
関連
-
[解決済み] Androidのソフトキーボードをプログラムで閉じる/隠すにはどうすればよいですか?
-
[解決済み] cURLでJSONデータをPOSTするにはどうすればよいですか?
-
[解決済み] Androidでアクティビティ起動時にEditTextにフォーカスが当たらないようにする方法
-
[解決済み] JavaScriptでJSONをきれいに印刷する
-
[解決済み] フォーム送信のようなJavaScriptのポストリクエスト
-
[解決済み] HTTP POSTリクエストでは、どのようにパラメータが送信されるのですか?
-
[解決済み] HTTP POST Web リクエストの作成方法
-
[解決済み] node.jsでHTTP POSTリクエストはどのように行われるのですか?
-
[解決済み] ProjectScopeServices に Factory タイプのサービスはありません。
-
[解決済み] ViewPager2でスワイプを無効にするには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] プログラムでソフトキーボードを開く
-
[解決済み] AndroidでラジオボタンにOnClickListenerを設定するには?
-
[解決済み] アプリ内課金テスト:android.test.purchased already owned
-
[解決済み] Android - Snackbar vs Toast - 使い方と違い。
-
[解決済み] キャンバスに複数行のテキストを描画する
-
[解決済み] ProjectScopeServices に Factory タイプのサービスはありません。
-
[解決済み] proguard hell - 参照されているクラスが見つかりません。
-
[解決済み] BottomNavigationViewを新しいNavControllerで使用する際に、フラグメントを生かす方法はありますか?
-
[解決済み] ブルートゥースアプリケーションのテストにアンドロイドエミュレータを使用するには?
-
[解決済み] AndroidでJSONオブジェクトをRequestで送信するには?