RequestCall.java 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. package okhttp.request;
  2. import java.io.IOException;
  3. import java.util.concurrent.TimeUnit;
  4. import okhttp.OkHttpUtils;
  5. import okhttp3.Call;
  6. import okhttp3.OkHttpClient;
  7. import okhttp3.Request;
  8. import okhttp3.Response;
  9. import okhttp.callback.Callback;
  10. /**
  11. * Created by zhy on 15/12/15.
  12. * 对OkHttpRequest的封装,对外提供更多的接口:cancel(),readTimeOut()...
  13. */
  14. public class RequestCall
  15. {
  16. private OkHttpRequest okHttpRequest;
  17. private Request request;
  18. private Call call;
  19. private long readTimeOut;
  20. private long writeTimeOut;
  21. private long connTimeOut;
  22. private OkHttpClient clone;
  23. public RequestCall(OkHttpRequest request)
  24. {
  25. this.okHttpRequest = request;
  26. }
  27. public RequestCall readTimeOut(long readTimeOut)
  28. {
  29. this.readTimeOut = readTimeOut;
  30. return this;
  31. }
  32. public RequestCall writeTimeOut(long writeTimeOut)
  33. {
  34. this.writeTimeOut = writeTimeOut;
  35. return this;
  36. }
  37. public RequestCall connTimeOut(long connTimeOut)
  38. {
  39. this.connTimeOut = connTimeOut;
  40. return this;
  41. }
  42. public Call buildCall(Callback callback)
  43. {
  44. request = generateRequest(callback);
  45. if (readTimeOut > 0 || writeTimeOut > 0 || connTimeOut > 0)
  46. {
  47. readTimeOut = readTimeOut > 0 ? readTimeOut : OkHttpUtils.DEFAULT_MILLISECONDS;
  48. writeTimeOut = writeTimeOut > 0 ? writeTimeOut : OkHttpUtils.DEFAULT_MILLISECONDS;
  49. connTimeOut = connTimeOut > 0 ? connTimeOut : OkHttpUtils.DEFAULT_MILLISECONDS;
  50. clone = OkHttpUtils.getInstance().getOkHttpClient().newBuilder()
  51. .readTimeout(readTimeOut, TimeUnit.MILLISECONDS)
  52. .writeTimeout(writeTimeOut, TimeUnit.MILLISECONDS)
  53. .connectTimeout(connTimeOut, TimeUnit.MILLISECONDS)
  54. .build();
  55. call = clone.newCall(request);
  56. } else
  57. {
  58. call = OkHttpUtils.getInstance().getOkHttpClient().newCall(request);
  59. }
  60. return call;
  61. }
  62. private Request generateRequest(Callback callback)
  63. {
  64. return okHttpRequest.generateRequest(callback);
  65. }
  66. public void execute(Callback callback)
  67. {
  68. buildCall(callback);
  69. if (callback != null)
  70. {
  71. callback.onBefore(request, getOkHttpRequest().getId());
  72. }
  73. OkHttpUtils.getInstance().execute(this, callback);
  74. }
  75. public Call getCall()
  76. {
  77. return call;
  78. }
  79. public Request getRequest()
  80. {
  81. return request;
  82. }
  83. public OkHttpRequest getOkHttpRequest()
  84. {
  85. return okHttpRequest;
  86. }
  87. public Response execute() throws IOException
  88. {
  89. buildCall(null);
  90. return call.execute();
  91. }
  92. public void cancel()
  93. {
  94. if (call != null)
  95. {
  96. call.cancel();
  97. }
  98. }
  99. }