Переглянути джерело

1. stetho 디버그 기능 추가.

aaron 8 роки тому
батько
коміт
e85ada154e

+ 2 - 0
onecable/build.gradle

@@ -118,6 +118,8 @@ dependencies {
     compile 'com.android.support.constraint:constraint-layout:1.0.0-beta4'
     compile 'com.android.support:design:25.3.1'
     compile 'com.kyleduo.switchbutton:library:1.4.6'
+    compile 'com.facebook.stetho:stetho:1.5.0'
+    compile 'com.facebook.stetho:stetho-urlconnection:1.5.0'
     annotationProcessor 'com.jakewharton:butterknife-compiler:8.5.1'
 }
 

+ 2 - 0
onecable/src/main/java/com/ntels/onecable/common/AppConfig.java

@@ -2,6 +2,7 @@ package com.ntels.onecable.common;
 
 import com.google.firebase.analytics.FirebaseAnalytics;
 
+import com.facebook.stetho.Stetho;
 import com.ntels.onecable.R;
 import com.ntels.onecable.common.util.Dlog;
 import com.ntels.onecable.common.util.LogUtil;
@@ -283,6 +284,7 @@ public class AppConfig extends MultiDexApplication {
     public void onCreate() {
 
         super.onCreate();
+        Stetho.initializeWithDefaults(this);
         this.DEBUG = isDebuggable(this);
         instance = this;
         Typekit.getInstance().addNormal(Typekit.createFromAsset(this, "fonts/NotoSans-Light.otf"))

+ 53 - 6
onecable/src/main/java/com/ntels/onecable/common/http/HttpTask.java

@@ -4,6 +4,9 @@
 
 package com.ntels.onecable.common.http;
 
+import com.facebook.stetho.urlconnection.ByteArrayRequestEntity;
+import com.facebook.stetho.urlconnection.SimpleRequestEntity;
+import com.facebook.stetho.urlconnection.StethoURLConnectionManager;
 import com.ntels.onecable.common.AppConfig;
 import com.ntels.onecable.common.Constants;
 import com.ntels.onecable.common.c_interface.OnTaskExecutionFinished;
@@ -14,11 +17,13 @@ import com.ntels.onecable.common.util.Util;
 
 import android.content.Context;
 import android.os.AsyncTask;
+import android.support.annotation.Nullable;
 import android.webkit.CookieManager;
 
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.IOException;
+import java.io.InputStream;
 import java.io.OutputStream;
 import java.io.OutputStreamWriter;
 import java.io.PrintWriter;
@@ -28,6 +33,7 @@ import java.net.URL;
 import java.net.URLConnection;
 import java.util.List;
 import java.util.Map;
+import java.util.zip.GZIPInputStream;
 
 import javax.net.ssl.HostnameVerifier;
 import javax.net.ssl.HttpsURLConnection;
@@ -50,6 +56,9 @@ public class HttpTask extends AsyncTask<CustomRequest, Integer, Response[]> {
 
     private static final String TAG = HttpTask.class.getSimpleName();
 
+    private static final String HEADER_ACCEPT_ENCODING = "Accept-Encoding";
+    private static final String GZIP_ENCODING = "gzip";
+
     protected Context context;
 
     private OnTaskExecutionFinished _task_finished_event;
@@ -59,9 +68,10 @@ public class HttpTask extends AsyncTask<CustomRequest, Integer, Response[]> {
     private String delimiter = "--";
     private String sTempCookies = "";
     String charset = "UTF-8";
+    private final StethoURLConnectionManager mStethoURLConnectionManager;
 
     public HttpTask() {
-
+        this.mStethoURLConnectionManager = new StethoURLConnectionManager(null);
     }
 
     /**
@@ -84,6 +94,7 @@ public class HttpTask extends AsyncTask<CustomRequest, Integer, Response[]> {
     public HttpTask(Context context) {
 
         this.context = context;
+        this.mStethoURLConnectionManager = new StethoURLConnectionManager(null);
     }
 
     @Override
@@ -185,6 +196,9 @@ public class HttpTask extends AsyncTask<CustomRequest, Integer, Response[]> {
             httpConn.setInstanceFollowRedirects(true);
 //            httpConn.setRequestProperty("cookie", sTempCookies);
             httpConn.setAllowUserInteraction(false);
+
+            requestDecompression(httpConn);
+
             if (customRequest.getHttpMethod().equals(CustomRequest.HTTP_METHOD_MULTIPART)) {
                 httpConn.setRequestMethod(CustomRequest.HTTP_METHOD_POST);
             } else {
@@ -220,6 +234,18 @@ public class HttpTask extends AsyncTask<CustomRequest, Integer, Response[]> {
 
             Dlog.v("jino4444");
 
+            SimpleRequestEntity requestEntity = null;
+            if (!mUtil.null2string(customRequest.getBodyStr()).equals("")) {
+                Dlog.v("customRequest.getBodyStr().toString() = " + customRequest.getBodyStr().toString());
+//                        os.write(customRequest.getBodyStr().getBytes());
+                requestEntity = new ByteArrayRequestEntity(customRequest.getBodyStr().getBytes());
+            } else if (!mUtil.null2string(customRequest.getBody()).equals("")) {
+                Dlog.v("mUtil.convPostBodyJson(request.getBody()).toString()= " + mUtil.convPostBodyJson(customRequest.getBody()).toString());
+//                        os.write(mUtil.convPostBodyJson(customRequest.getBody()).toString().getBytes());
+                requestEntity = new ByteArrayRequestEntity(mUtil.convPostBodyJson(customRequest.getBody()).toString().getBytes());
+            }
+            mStethoURLConnectionManager.preConnect(httpConn, requestEntity);
+
             if (customRequest.getHttpMethod().equals(CustomRequest.HTTP_METHOD_MULTIPART)) {
                 httpConn.setUseCaches(false);
                 httpConn.setDoOutput(true);
@@ -255,20 +281,27 @@ public class HttpTask extends AsyncTask<CustomRequest, Integer, Response[]> {
 
                     OutputStream os = httpConn.getOutputStream();
 
-                    if (!mUtil.null2string(customRequest.getBodyStr()).equals("")) {
+                    /*if (!mUtil.null2string(customRequest.getBodyStr()).equals("")) {
                         Dlog.v("customRequest.getBodyStr().toString() = " + customRequest.getBodyStr().toString());
-                        os.write(customRequest.getBodyStr().getBytes());
+//                        os.write(customRequest.getBodyStr().getBytes());
+                        requestEntity = new ByteArrayRequestEntity(customRequest.getBodyStr().getBytes());
                     } else {
                         Dlog.v("mUtil.convPostBodyJson(request.getBody()).toString()= " + mUtil.convPostBodyJson(customRequest.getBody()).toString());
-                        os.write(mUtil.convPostBodyJson(customRequest.getBody()).toString().getBytes());
-                    }
+//                        os.write(mUtil.convPostBodyJson(customRequest.getBody()).toString().getBytes());
+                        requestEntity = new ByteArrayRequestEntity(mUtil.convPostBodyJson(customRequest.getBody()).toString().getBytes());
+                    }*/
+                    requestEntity.writeTo(os);
                 }
             }
 
+            mStethoURLConnectionManager.postConnect();
 
             String content = "";
+            InputStream rawStream = httpConn.getInputStream();
             try {
-                content = ResponseHelper.read(httpConn.getInputStream());
+                rawStream = mStethoURLConnectionManager.interpretResponseStream(rawStream);
+                InputStream decompressedStream = applyDecompressionIfApplicable(httpConn, rawStream);
+                content = ResponseHelper.read(decompressedStream);
             } catch (IOException e1) {
                 content = ResponseHelper.read(httpConn.getErrorStream());
             }
@@ -280,6 +313,7 @@ public class HttpTask extends AsyncTask<CustomRequest, Integer, Response[]> {
             retval = new Response(httpConn.getResponseCode(), httpConn.getResponseMessage(), content);
         } catch (IOException e) {
             e.printStackTrace();
+            mStethoURLConnectionManager.httpExchangeFailed(e);
             try {
                 CookieManager.getInstance().setCookie(url.toString(), sTempCookies);
                 retval = new Response(httpConn.getResponseCode(), httpConn.getResponseMessage(), "");
@@ -297,6 +331,19 @@ public class HttpTask extends AsyncTask<CustomRequest, Integer, Response[]> {
         return retval;
     }
 
+    private static void requestDecompression(HttpURLConnection conn) {
+        conn.setRequestProperty(HEADER_ACCEPT_ENCODING, GZIP_ENCODING);
+    }
+
+    @Nullable
+    private static InputStream applyDecompressionIfApplicable(
+            HttpURLConnection conn, @Nullable InputStream in) throws IOException {
+        if (in != null && GZIP_ENCODING.equals(conn.getContentEncoding())) {
+            return new GZIPInputStream(in);
+        }
+        return in;
+    }
+
     /**
      * HTTP header property 추가.
      *