Trong câu trả lời này, tôi đang sử dụng một ví dụ được đăng bởi Justin Grammens .
Về JSON
JSON là viết tắt của JavaScript Object Notation. Trong JavaScript thuộc tính có thể được tham chiếu cả như thế này object1.name
và như thế này object['name'];
. Ví dụ từ bài viết sử dụng bit JSON này.
Các phần
Một đối tượng người hâm mộ với email làm khóa và foo@bar.com làm giá trị
{
fan:
{
email : 'foo@bar.com'
}
}
Vì vậy, đối tượng tương đương sẽ là fan.email;
hoặc fan['email'];
. Cả hai sẽ có cùng giá trị 'foo@bar.com'
.
Giới thiệu về Yêu cầu HttpClient
Sau đây là những gì tác giả của chúng tôi sử dụng để đưa ra Yêu cầu HttpClient . Tôi không tự nhận mình là một chuyên gia về điều này vì vậy nếu ai có cách tốt hơn để sử dụng một số thuật ngữ thì cứ tự nhiên.
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);
}
Bản đồ
Nếu bạn không quen với Map
cấu trúc dữ liệu, vui lòng xem tài liệu tham khảo Bản đồ Java . Tóm lại, một bản đồ tương tự như một từ điển hoặc một hàm băm.
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;
}
Vui lòng bình luận về bất kỳ câu hỏi nào nảy sinh về bài đăng này hoặc nếu tôi chưa nói rõ điều gì hoặc nếu tôi chưa chạm vào điều gì đó mà bạn vẫn còn bối rối về ... vv bất cứ điều gì xuất hiện trong đầu bạn thực sự.
(Tôi sẽ gỡ xuống nếu Justin Grammens không chấp thuận. Nhưng nếu không, thì cảm ơn Justin vì đã rất bình tĩnh.)
Cập nhật
Tôi chỉ tình cờ nhận được nhận xét về cách sử dụng mã và nhận ra rằng có một lỗi trong kiểu trả về. Chữ ký phương thức được đặt để trả về một chuỗi nhưng trong trường hợp này, nó không trả về bất cứ thứ gì. Tôi đã thay đổi chữ ký thành HttpResponse và sẽ giới thiệu cho bạn liên kết này trên Cơ quan phản hồi của HttpResponse
, biến đường dẫn là url và tôi đã cập nhật để sửa lỗi trong mã.