2015-05-06 18 views
13

Tôi đang làm việc trên một ứng dụng Android có sử dụng Retrofit để tạo một khách hàng yên tĩnh. Để gỡ lỗi cuộc gọi mạng, tôi muốn hiển thị hoặc kết xuất url thực sự đang được gọi. Có cách nào để làm việc này không? Tôi đã bao gồm một số mã dưới đây cho thấy cách ứng dụng hiện đang sử dụng trang bị thêm.Trang bị thêm @GET - cách hiển thị chuỗi yêu cầu?

Khách hàng định nghĩa giao diện:

import retrofit.Callback; 
import retrofit.http.Body; 
import retrofit.http.GET; 
import retrofit.http.Headers; 
import retrofit.http.POST; 
import retrofit.http.Path; 

// etc... 

public interface MyApiClient { 

    @Headers({ 
      "Connection: close" 
    }) 

    @GET("/{userId}/{itemId}/getCost.do") 
    public void get(@Path("userId") String userId, @Path("itemId") String userId, Callback<Score> callback); 


//....etc 

} 

Dịch vụ trong đó sử dụng tạo ra khách hàng:

// etc... 
    import javax.inject.Inject; 
    import retrofit.Callback; 
    import retrofit.RetrofitError; 
    import retrofit.client.Response; 


@Inject 
MyApiClient myApiClient; 

// etc... 
       myApiClient.getCost(myId, itemId, new Callback<Cost>() { 
        @Override 
        public void success(Cost cost, Response response) { 
         Log.d("Success: %s", String.valueOf(cost.cost)); 
         if (cost.cost != -1) { 
          processFoundCost(cost); 
         } else { 
          processMissingCost(itemId); 
         } 
         stopTask(); 
        } 

        @Override 
        public void failure(RetrofitError error) { 
         handleFailure(new CostFailedEvent(), null); 
        } 
       }); 
      } 

Trả lời

7

RetrofitError có một phương pháp getUrl() trả về URL.

Ngoài ra, Response cũng có phương thức getUrl() trong cuộc gọi lại.

đó, và bạn cũng có thể xác định mức độ log theo this question:

RestAdapter adapter = (new RestAdapter.Builder()). 
//... 
      setLogLevel(LogLevel.FULL).setLog(new AndroidLog("YOUR_LOG_TAG"))    

Mặc dù dựa trên docs, LogLevel.BASIC nên làm những gì bạn cần.

BASIC 
Log only the request method and URL and the response status code and execution time. 
+0

Cảm ơn! Tôi ước tôi có thể chấp nhận cả hai câu trả lời. –

+1

Tôi upvoted anh ta, nó là công bằng: D vui vì tôi có thể giúp – EpicPandaForce

5

Có, bạn có thể bật ghi nhật ký gỡ lỗi bằng cách gọi setLogLevel() trên RestAdapter của mình.

tôi thường thiết lập đăng nhập để LogLevel.FULL cho debug xây dựng như sau:

RestAdapter adapter = builder.setEndpoint("example.com") 
    .setLogLevel(BuildConfig.DEBUG ? RestAdapter.LogLevel.FULL : RestAdapter.LogLevel.NONE) 
    .build(); 

này sẽ tự động in ra tất cả các thông tin liên quan đến các yêu cầu HTTP của bạn, bao gồm các URL mà bạn đang đánh, tiêu đề, và cơ thể của cả yêu cầu và phản hồi.

+0

Cảm ơn - thông tin tuyệt vời. –

32

call.request().url(), trong đó call là loại retrofit2.Call.

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