Tôi đang cố gắng không thành công để sử dụng API trên Android bằng thư viện Retrofit nhưng trong khi sử dụng POSTMAN tôi có thể thấy kết quả mong đợi.Gửi yêu cầu đăng bài với thông số sử dụng trang bị thêm
Postman LẬP
Url api (base + controller) Phương pháp
HTTP thiết phải POST
Clicked từ dữ liệu hoặc x-www-form- urlencoded
Sau đó, tôi chuyển hai tham số trên các trường khóa/giá trị.
Retrofit ANDROID LẬP
@POST("/GetDetailWithMonthWithCode")
void getLandingPageReport(@Query("code") String code,
@Query("monthact") String monthact,
Callback<LandingPageReport> cb);
@FormUrlEncoded
@POST("/GetDetailWithMonthWithCode")
void getLandingPageReport(@Field("code") String code,
@Field("monthact") String monthact,
Callback<LandingPageReport> cb);
Không ai trong số các lựa chọn này hoạt động. Nhưng tôi nhận được kết quả là {}.
CẬP NHẬT
thiết lập tương tự bằng cách sử dụng các lớp chuẩn HttpClient
(và HttpPost
) hoạt động tốt.
HttpClient client = new DefaultHttpClient();
HttpPost post = new HttpPost(url);
List<NameValuePair> urlParameters = new ArrayList<NameValuePair>();
urlParameters.add(new BasicNameValuePair("code", "testcode"));
urlParameters.add(new BasicNameValuePair("monthact", "feb-2015"));
post.setEntity(new UrlEncodedFormEntity(urlParameters));
HttpResponse response = client.execute(post);
Tại sao tôi không thể thực hiện yêu cầu này và nhận được phản hồi chính xác khi trang bị thêm?
CẬP NHẬT 2
@POST("/GetDetailWithMonthWithCode")
void getLandingPageReport(@Query("code") String code,
@Query("monthact") String monthact,
Callback<List<LandingPageReport>> cb);
@FormUrlEncoded
@POST("/GetDetailWithMonthWithCode")
void getLandingPageReport(@Field("code") String code,
@Field("monthact") String monthact,
Callback<List<LandingPageReport>>> cb);
Sau khi chơi đùa Tôi nghĩ rằng tôi đã tìm thấy nguồn gốc của vấn đề. Tôi đã cập nhật mã trang bị thêm của mình để nhận được List<LandingPageReport>
. Nhưng bây giờ lỗi này xảy ra
retrofit.RetrofitError: com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2 path $
Lý do là tôi tiêu thụ 2 api (webapi và wcf). Tất cả các đáp ứng json
khác của tôi là mảng các đối tượng. [{}, {}] nhưng trong cuộc gọi này, tôi đã nhận được điều này
{
"GetDetailWithMonthWithCodeResult": [
{
"code": "test",
"field1": "test",
}
]
}
Nhưng tôi vẫn không thể phân tích cú pháp phản hồi.
'GetDetailWithMonth & Code' phần này có lẽ là không hợp lệ –
những gì bạn có ý nghĩa với điều đó? làm thế nào tôi có thể làm điều đó làm việc? trên iOS hoạt động và những gì tôi làm là tôi chuyển đổi thành NSDATA chuỗi này "par1 = adads & par2 = asd" và đưa nó vào yêu cầu. – Adam
biểu tượng '&' hoạt động như một dấu phân cách cho các tham số yêu cầu, vì vậy bạn nên đổi tên phương thức API (bên trong API) thành một cái gì đó như 'GetDetailWithMonthAndCode' –