Tôi có một ứng dụng bình và api trên một máy chủ làm việc với các url sau đây được gửi từ nhà gaTái bình gọi api trong Android với Retrofit
curl -i -H "Content-type: application/json" -X GET http://myapp.com/890/14000/10000/007 -d '{"id":"3240f056c8f5fb"}'
Tôi cố gắng để tái tạo này sử dụng trang bị thêm trên Android. Tôi đang sử dụng phiên bản 1.7 vì điều này làm việc với một số mã di sản không được hiển thị ở đây. Dưới đây là phần có liên quan của lớp ứng dụng
DavesApi buildDavesApi() {
Gson gson = new GsonBuilder()
.setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES)
.create();
return new RestAdapter.Builder()
.setLogLevel(RestAdapter.LogLevel.FULL) // change this to FULL to see full JSON response
.setEndpoint(DAVESENDPOINT)
.setConverter(new GsonConverter(gson))
.setRequestInterceptor(new RequestInterceptor() {
@Override
public void intercept(RequestFacade request) {
request.addHeader("Content-type", "application/json");
}
})
.build()
.create(DavesApi.class);
}
và lớp api
public interface DavesApi {
@Headers("\{\"id\"\:\"3240f056c8f5fb\"\}")
@GET("/{importantnumber}/14000/10000/007")
void getThumbnail(@Path("importantnumber") Integer id, Callback<DavesActivity> activity);
}
Tôi chỉ nhận lỗi chung vào thời điểm này như
D/Retrofit: ---> HTTP GET http://myurl.com/420059/14000/10000/007
D/Retrofit: '{"id": "3240f056c8f5fb"}'
D/Retrofit: Content-Type: application/json
D/Retrofit: ---> END HTTP (no body)
D/Retrofit: <--- HTTP 400 http://myurl.com/420059/14000/10000/007 (2653ms)
D/Retrofit: : HTTP/1.1 400 BAD REQUEST
D/Retrofit: Connection: keep-alive
D/Retrofit: Content-Length: 95
D/Retrofit: Content-Type: application/json
D/Retrofit: Date: Sun, 29 Nov 2015 23:08:45 GMT
D/Retrofit: Server: ngx_openresty/1.4.3.6
D/Retrofit: X-Android-Received-Millis: 1448838524561
D/Retrofit: X-Android-Response-Source: NETWORK 400
D/Retrofit: X-Android-Sent-Millis: 1448838523377
D/Retrofit: {"description": "The browser (or proxy) sent a request that this server could not understand."}
D/Retrofit: <--- END HTTP (95-byte body)
E/activity_fragment: retrofit.RetrofitError: 400 BAD REQUEST
Đây là bình đầu tiên của tôi ứng dụng và tôi không hoàn toàn chắc chắn làm thế nào để gỡ lỗi vì vậy bất kỳ trợ giúp ở đây cũng được đánh giá cao.
Tôi cũng không có quyền truy cập vào các bản ghi máy chủ
Cập nhật
Để thử và theo dõi vấn đề tôi chỉnh sửa mã trên máy chủ. Nếu tôi chỉ đơn giản trả về một chuỗi trong api thì retrofit sẽ nhận được một phản hồi. Nếu tôi thử và trả lại bất kỳ dữ liệu nào được gửi trong các tiêu đề từ trang bị thêm, tôi sẽ nhận được phản hồi trống trong khi yêu cầu curl sẽ nhận được phản hồi thích hợp. Tôi đã thử điều này với response.data
cũng như response.json
để đảm bảo rằng nó không chỉ là vấn đề mã hóa json. Tuy nhiên, khi làm điều này tôi cần phải loại bỏ tiêu đề "Content-type", "application/json" để không nhận được 400 được đăng trước đó.
mới log khi trở response.data
D/Retrofit: ---> HTTP GET http://myurl.com/420059/14000/10000/007
D/Retrofit: test: header
D/Retrofit: ---> END HTTP (no body)
D/Retrofit: <--- HTTP 200 http://myurl.com/420059/14000/10000/007 (316ms)
D/Retrofit: : HTTP/1.1 200 OK
D/Retrofit: Connection: keep-alive
D/Retrofit: Content-Length: 0
D/Retrofit: Content-Type: text/html; charset=utf-8
D/Retrofit: Date: Mon, 30 Nov 2015 20:34:54 GMT
D/Retrofit: Server: ngx_openresty/1.4.3.6
D/Retrofit: X-Android-Received-Millis: 1448915692589
D/Retrofit: X-Android-Response-Source: NETWORK 200
D/Retrofit: X-Android-Sent-Millis: 1448915692449
D/Retrofit: X-Clacks-Overhead: GNU Terry Pratchett
D/Retrofit: <--- END HTTP (0-byte body) // empty body :(
kiểm tra bản giới thiệu này để trang bị thêm: https://github.com/square/retrofit – Saif
Cảm ơn. Tôi đã thấy bản demo đó và sử dụng trang bị thêm với các apis khác trước đây, chỉ trong trường hợp này tôi không thể có được cú pháp đúng – EnduroDave
Bạn đã thử trong một dự án độc lập với Retrofit 1.9 chưa? Lỗi "không có nội dung" có thể là sự cố với cấu hình của dự án phụ trợ của bạn. Tôi đã nhận yêu cầu với một cơ thể trống rỗng và trang bị thêm hoạt động tốt với nó. – jonathanrz