Search in sources :

Example 6 with HttpResponse

use of com.qiyei.sdk.https.server.HttpResponse in project EssayJoke by qiyei2015.

the class RetrofitEngine method enqueuePostCall.

@Override
public <T, R> void enqueuePostCall(final HttpTask<T> task, final IHttpCallback<R> callback) {
    // 获取task要执行的方法的参数
    Object params = task.getRequest().getBody();
    // 构造Call
    Call call = buildCall(task, params);
    if (call == null) {
        return;
    }
    // 设置task到okHttp拦截器中
    setOkHttpInterceptorTag(call, task);
    // 将任务加到队列里面
    HttpCallManager.getInstance().addCall(task.getTaskId(), call);
    call.enqueue(new Callback<R>() {

        @Override
        public void onResponse(Call<R> call, Response<R> response) {
            // 移除task
            HttpCallManager.getInstance().removeCall(task.getTaskId());
            HttpResponse<R> obj = new HttpResponse<>(response.body());
            callback.onSuccess(obj);
        }

        @Override
        public void onFailure(Call<R> call, Throwable t) {
            // 移除task
            HttpCallManager.getInstance().removeCall(task.getTaskId());
            callback.onFailure((Exception) t);
        }
    });
}
Also used : Call(retrofit2.Call) HttpResponse(com.qiyei.sdk.https.server.HttpResponse) IOException(java.io.IOException) InvocationTargetException(java.lang.reflect.InvocationTargetException)

Example 7 with HttpResponse

use of com.qiyei.sdk.https.server.HttpResponse in project EssayJoke by qiyei2015.

the class RetrofitEngine method enqueueDownloadCall.

@Override
public <T, R> void enqueueDownloadCall(final HttpTask<T> task, final IHttpTransferCallback<R> callback) {
    Retrofit retrofit = RetrofitFactory.createRetrofit(task.getRequest().getBaseUrl());
    // 获取到OkHttpClient
    OkHttpClient client = (OkHttpClient) retrofit.callFactory();
    // 找到Interceptor
    MyInterceptor interceptor = new MyInterceptor();
    interceptor.setProgressResponseBody(new ProgressResponseBody(callback));
    client = client.newBuilder().addInterceptor(interceptor).build();
    try {
        Field callFactoryField = retrofit.getClass().getDeclaredField("callFactory");
        if (callFactoryField == null) {
            LogManager.i(HTTP.TAG, "callFactoryField is null");
            return;
        }
        callFactoryField.setAccessible(true);
        callFactoryField.set(retrofit, client);
    } catch (NoSuchFieldException e) {
        e.printStackTrace();
    } catch (IllegalAccessException e) {
        e.printStackTrace();
    }
    // 获取task要执行的方法的参数
    Object params = task.getRequest().getBody();
    // 构造Call
    Call call = buildCall(retrofit, task, params);
    if (call == null) {
        return;
    }
    // 设置task到okHttp拦截器中
    setOkHttpInterceptorTag(call, task);
    // 将任务加到队列里面
    HttpCallManager.getInstance().addCall(task.getTaskId(), call);
    call.enqueue(new Callback<R>() {

        @Override
        public void onResponse(Call<R> call, final Response<R> response) {
            // 可以在这里构造ProgressResponseBody来实现进度的监听
            final ResponseBody responseBody = (ResponseBody) response.body();
            // final ProgressResponseBody responseBody = new ProgressResponseBody((ResponseBody) response.body(),callback);
            // new Thread(){
            // @Override
            // public void run() {
            // 
            // //read the body to file
            // BufferedSource source = responseBody.source();
            // File outFile = new File(task.getRequest().getFilePath());
            // outFile.delete();
            // outFile.getParentFile().mkdirs();
            // try {
            // outFile.createNewFile();
            // BufferedSink sink = Okio.buffer(Okio.sink(outFile));
            // source.readAll(sink);
            // sink.flush();
            // source.close();
            // } catch (IOException e) {
            // e.printStackTrace();
            // }
            // 
            // }
            // }.start();
            new Thread() {

                @Override
                public void run() {
                    try {
                        InputStream is = responseBody.byteStream();
                        File file = new File(task.getRequest().getFilePath());
                        // 创建父目录
                        file.getParentFile().mkdirs();
                        if (file.exists()) {
                            file.delete();
                        }
                        FileOutputStream fos = new FileOutputStream(file);
                        BufferedInputStream bis = new BufferedInputStream(is);
                        byte[] buffer = new byte[1024];
                        int len;
                        while ((len = bis.read(buffer)) != -1) {
                            fos.write(buffer, 0, len);
                            fos.flush();
                        }
                        fos.close();
                        bis.close();
                        is.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                    mHandler.post(new Runnable() {

                        @Override
                        public void run() {
                            // 移除task
                            HttpCallManager.getInstance().removeCall(task.getTaskId());
                            HttpResponse<R> obj = new HttpResponse<>(response.body());
                            callback.onSuccess(obj);
                        }
                    });
                }
            }.start();
        }

        @Override
        public void onFailure(Call<R> call, Throwable t) {
            // 移除task
            HttpCallManager.getInstance().removeCall(task.getTaskId());
            callback.onFailure((Exception) t);
        }
    });
}
Also used : MyInterceptor(com.qiyei.sdk.https.server.MyInterceptor) OkHttpClient(okhttp3.OkHttpClient) Field(java.lang.reflect.Field) BufferedInputStream(java.io.BufferedInputStream) Call(retrofit2.Call) BufferedInputStream(java.io.BufferedInputStream) InputStream(java.io.InputStream) HttpResponse(com.qiyei.sdk.https.server.HttpResponse) ProgressResponseBody(com.qiyei.sdk.https.server.ProgressResponseBody) IOException(java.io.IOException) IOException(java.io.IOException) InvocationTargetException(java.lang.reflect.InvocationTargetException) ResponseBody(okhttp3.ResponseBody) ProgressResponseBody(com.qiyei.sdk.https.server.ProgressResponseBody) Retrofit(retrofit2.Retrofit) FileOutputStream(java.io.FileOutputStream) File(java.io.File)

Aggregations

HttpResponse (com.qiyei.sdk.https.server.HttpResponse)7 IOException (java.io.IOException)7 IHttpCallback (com.qiyei.sdk.https.server.IHttpCallback)4 IHttpTransferCallback (com.qiyei.sdk.https.server.IHttpTransferCallback)4 Call (okhttp3.Call)4 Callback (okhttp3.Callback)4 Response (okhttp3.Response)4 ProgressResponseBody (com.qiyei.sdk.https.server.ProgressResponseBody)3 File (java.io.File)3 InvocationTargetException (java.lang.reflect.InvocationTargetException)3 ResponseBody (okhttp3.ResponseBody)3 Call (retrofit2.Call)3 BufferedSink (okio.BufferedSink)2 BufferedSource (okio.BufferedSource)2 MyInterceptor (com.qiyei.sdk.https.server.MyInterceptor)1 BufferedInputStream (java.io.BufferedInputStream)1 FileOutputStream (java.io.FileOutputStream)1 InputStream (java.io.InputStream)1 Field (java.lang.reflect.Field)1 OkHttpClient (okhttp3.OkHttpClient)1