Tôi đang cố triển khai một bài đăng JSON đơn giản tới URL chấp nhận JSON trong cơ thể với xác thực cơ bản trên ANDROID.Android - Bài đăng JSONClient JSON có xác thực cơ bản
Tôi đã thử với HttpUrlConnection
nhưng tôi bị "trái phép" và dữ liệu của tôi được gửi tới máy chủ.
Một cách khác mà tôi đã thử đang sử dụng HttpClient
, nhưng giờ tôi gặp sự cố khác. Xác thực hoạt động hoàn hảo nhưng dữ liệu không được gửi đến máy chủ ...
Để chắc chắn, tôi thiết lập một thử nghiệm nhỏ trong một dự án Java đơn giản (không phải Môi trường Android).
Đây là mã mà tôi đang sử dụng POST đến server:
DefaultHttpClient httpClient = new DefaultHttpClient();
ResponseHandler<String> resonseHandler = new BasicResponseHandler();
HttpPost postMethod = new HttpPost("http://localhost/api/v1/purchase/");
postMethod.setEntity(new StringEntity("{\"amount_adult\" : 1, \"object_id\" : 13}"));
postMethod.setHeader("Content-Type", "application/json");
String authorizationString = "Basic " + Base64.encodeToString(("travelbuddy" + ":" + "travelbuddy").getBytes(), Base64.DEFAULT); //this line is diffe
postMethod.setHeader("Authorization", authorizationString);
String response = httpClient.execute(postMethod,resonseHandler);
System.out.println("response :" + response);
Các mã trong dự án Java hoạt động hoàn hảo.
Khi tôi thử mã giống hệt nhau trong Android, tôi nhận được internal server error
từ máy chủ, điều đó có nghĩa là dữ liệu JSON chưa được nhận.
Tôi thực sự không hiểu tại sao tính năng này hoạt động trong JAVA nhưng không hoạt động trong Android.
Hiệu quả mà tôi muốn đạt được, là lệnh sau:
curl --dump-header - -H "Content-Type: application/json" -X
POST --data '{"amount_adult":1, "object_id":13}'
--user travelbuddy:travelbuddy http://localhost/api/v1/purchase/
Cảm ơn bạn đã trả lời của bạn, tôi chỉ minh họa trong mã này "localhost", trên thực tế tôi sử dụng đường dẫn đầy đủ của tên miền. – user1674948
Từ quan điểm của bạn, đây có phải là cách thực hiện đúng bài đăng cơ thể JSON cho máy chủ không? Có lẽ nó chỉ là một Emulator không hoạt động? – user1674948
Mã của bạn là đúng. Nếu bạn đang thử nghiệm trong Trình giả lập, hãy sử dụng địa chỉ IP 10.0.2.2 thay thế. Tham khảo http://developer.android.com/tools/devices/emulator.html#networkaddresses. – secondflying