2015-11-27 14 views
8

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 :(
+0

kiểm tra bản giới thiệu này để trang bị thêm: https://github.com/square/retrofit – Saif

+0

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

+0

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

Trả lời

2

Vâng có vẻ như nó mất việc bổ sung một tiền thưởng để buộc tôi phải làm việc này ra :(

này chỉ đơn giản là missunderstanding của tôi về curl cơ bản. Rõ ràng là yêu cầu curl đã đưa dữ liệu vào trong cơ thể trong khi tôi lấy cái này cho tiêu đề khác, chỉ cần thay đổi mã trên máy chủ để tìm kiếm request.header hoặc thay đổi id thành phần @data của yêu cầu trang bị thêm. 0 không thể tin rằng tôi đã lãng phí rất nhiều thời gian và tiền thưởng về lỗi này rõ ràng mù quáng.

Các vấn đề liên quan