ในคำตอบนี้ฉันกำลังใช้ตัวอย่างเช่นโพสต์โดยจัสติน Grammens
เกี่ยวกับ JSON
JSON ย่อมาจาก JavaScript Object Notation ใน JavaScript คุณสมบัติสามารถอ้างอิงได้ทั้งสองอย่างนี้และเช่นนี้object1.name
object['name'];
ตัวอย่างจากบทความใช้ JSON นี้เล็กน้อย
วัตถุชิ้นส่วนแฟนที่มีอีเมลเป็นคีย์และ foo@bar.com เป็นค่า
{
fan:
{
email : 'foo@bar.com'
}
}
ดังนั้นเทียบเท่าวัตถุที่จะเป็นหรือfan.email;
ทั้งสองฝ่ายจะมีค่าเดียวกันของfan['email'];
'foo@bar.com'
เกี่ยวกับคำขอ 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 แผนที่ ในระยะสั้นแผนที่ก็คล้ายกับพจนานุกรมหรือแฮช
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 'foo@bar.com'
//{ fan: { email : 'foo@bar.com' } }
//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 'foo@bar.com' together in map
holder.put(key, data);
}
return holder;
}
โปรดอย่าลังเลที่จะแสดงความคิดเห็นเกี่ยวกับคำถามใด ๆ ที่เกิดขึ้นเกี่ยวกับโพสต์นี้หรือหากฉันยังไม่ได้ทำอะไรให้ชัดเจนหรือหากฉันยังไม่ได้สัมผัสกับสิ่งที่คุณยังสับสน ... ฯลฯ อะไรก็ตามที่ปรากฏในหัวของคุณจริงๆ
(ฉันจะลบออกถ้า Justin Grammens ไม่อนุมัติ แต่ถ้าไม่เป็นเช่นนั้นขอบคุณ Justin ที่ใจเย็นกับมัน)
ปรับปรุง
ฉันยินดีที่จะได้รับความคิดเห็นเกี่ยวกับวิธีใช้รหัสและตระหนักว่ามีข้อผิดพลาดในประเภทการส่งคืน ลายเซ็นเมธอดถูกตั้งค่าให้ส่งคืนสตริง แต่ในกรณีนี้จะไม่ส่งคืนอะไรเลย ฉันเปลี่ยนลายเซ็นเป็น HttpResponse และจะแนะนำคุณไปยังลิงก์นี้ในการรับเนื้อหาตอบสนองของ HttpResponse
ตัวแปรพา ธ คือ url และฉันอัปเดตเพื่อแก้ไขข้อผิดพลาดในโค้ด