Ver código fonte

change download method

yanyi 6 anos atrás
pai
commit
f83937aba9

+ 1 - 0
app/build.gradle

@@ -32,4 +32,5 @@ dependencies {
     androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
     implementation project(':okhttplib')
     implementation 'com.yanyi.benyanyi:loglib:1.0.0'
+    implementation 'com.yanyi.benyanyi:permissionlib:1.0.1'
 }

+ 10 - 1
app/src/main/AndroidManifest.xml

@@ -6,7 +6,6 @@
     <!--STORAGE-->
     <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
-    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
 
     <application
         android:name=".AppContext"
@@ -22,5 +21,15 @@
                 <action android:name="android.intent.action.MAIN" />
             </intent-filter>
         </activity>
+        <!-- 定义FileProvider -->
+        <provider
+            android:name="android.support.v4.content.FileProvider"
+            android:authorities="com.mylove.okhttp.fileProvider"
+            android:exported="false"
+            android:grantUriPermissions="true">
+            <meta-data
+                android:name="android.support.FILE_PROVIDER_PATHS"
+                android:resource="@xml/file_provider" />
+        </provider>
     </application>
 </manifest>

+ 39 - 7
app/src/main/java/com/mylove/okhttp/MainActivity.java

@@ -1,10 +1,14 @@
 package com.mylove.okhttp;
 
+import android.content.Intent;
 import android.os.Bundle;
-import android.os.Environment;
+import android.support.annotation.NonNull;
 import android.support.annotation.Nullable;
 import android.support.v7.app.AppCompatActivity;
-import android.util.Log;
+
+import com.mylove.loglib.JLog;
+import com.yanyi.permissionlib.PermissionHelper;
+import com.yanyi.permissionlib.PermissionType;
 
 
 /**
@@ -15,22 +19,37 @@ import android.util.Log;
  */
 
 public class MainActivity extends AppCompatActivity {
+    private PermissionHelper permissionHelper;
 
     @Override
     protected void onCreate(@Nullable Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_main);
-        init();
+        String[] strings = new String[]{PermissionType.STORAGE};
+        permissionHelper = new PermissionHelper(this, strings);
+        permissionHelper.hasPermission(new PermissionHelper.OnPermissionListener() {
+            @Override
+            public void onAllPermissionSuccess() {
+                init();
+            }
+
+            @Override
+            public void onAllPermissionFailure() {
+
+            }
+        });
     }
 
     private void init() {
         OkHttpInfo.soapDataTopString = "";
+        JLog.init(true);
         String url = "http://www.yanyi.red/bluetooth/dfu_pkg0904.zip";
-        String filePath = Environment.getExternalStorageDirectory().toString() + "/dectector/dfu/";
+        String filePath = "/dectector/dfu/";
+//        String filePath = Environment.getExternalStorageDirectory().toString() + "/dectector/dfu/";
         OkHttpUtil.getInstance(this).downloadFile(url).download(filePath, new OnDownloadListener() {
             @Override
             public void onDownloading(int progress) {
-                Log.d("进度", progress + "");
+                JLog.d(progress + "");
             }
 
             @Override
@@ -40,12 +59,12 @@ public class MainActivity extends AppCompatActivity {
 
             @Override
             public <T> void onSuccess(T message) {
-
+                JLog.v(message);
             }
 
             @Override
             public void onFailure(Throwable t) {
-
+                JLog.e(t.getMessage());
             }
         });
 //        val url = "http://www.yanyi.red/bluetooth/dfu_pkg0904.zip"
@@ -67,4 +86,17 @@ public class MainActivity extends AppCompatActivity {
 //            }
 //        })
     }
+
+    @Override
+    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
+                                           @NonNull int[] grantResults) {
+        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
+        permissionHelper.onRequestPermissionsResult(requestCode, permissions, grantResults);
+    }
+
+    @Override
+    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+        super.onActivityResult(requestCode, resultCode, data);
+        permissionHelper.onActivityResult(requestCode, resultCode, data);
+    }
 }

+ 23 - 0
app/src/main/res/xml/file_provider.xml

@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<paths xmlns:android="http://schemas.android.com/apk/res/android">
+    <!--1、对应内部内存卡根目录:Context.getFileDir()-->
+    <files-path
+        name="dectector_root"
+        path="/" />
+    <!--2、对应应用默认缓存根目录:Context.getCacheDir()-->
+    <cache-path
+        name="dectector_cache"
+        path="/" />
+    <!--3、对应外部内存卡根目录:Environment.getExternalStorageDirectory()-->
+    <external-path
+        name="ext_root"
+        path="dectector/" />
+    <!--4、对应外部内存卡根目录下的APP公共目录:Context.getExternalFileDir(String)-->
+    <external-files-path
+        name="ext_pub"
+        path="/" />
+    <!--5、对应外部内存卡根目录下的APP缓存目录:Context.getExternalCacheDir()-->
+    <external-cache-path
+        name="ext_cache"
+        path="/" />
+</paths>

+ 1 - 1
okhttplib/bintrayUpload.gradle

@@ -7,7 +7,7 @@ def siteUrl = 'https://github.com/BenYanYi/OkHttp' // 项目主页。
 def gitUrl = 'https://github.com/BenYanYi/OkHttp.git' // Git仓库的url。
 
 group = "com.yanyi.benyanyi"// 唯一包名,比如compile 'com.ansen.http:okhttpencapsulation:1.0.1'中的com.ansen.http就是这里配置的。
-version = "1.0.4"//项目引用的版本号,比如compile 'com.ansen.http:okhttpencapsulation:1.0.1'中的1.0.1就是这里配置的。
+version = "1.0.4-2"//项目引用的版本号,比如compile 'com.ansen.http:okhttpencapsulation:1.0.1'中的1.0.1就是这里配置的。
 install {
     repositories.mavenInstaller {
         // This generates POM.xml with proper parameters

+ 1 - 0
okhttplib/build.gradle

@@ -37,5 +37,6 @@ dependencies {
     implementation 'io.reactivex.rxjava2:rxandroid:2.0.1'
     implementation 'com.google.code.gson:gson:2.8.5'
     implementation 'com.squareup.retrofit2:retrofit:2.4.0'
+    api files('lib/android-xml-json.jar')
 }
 apply from: 'bintrayUpload.gradle'

BIN
okhttplib/lib/android-xml-json.jar


+ 10 - 10
okhttplib/src/main/java/com/mylove/okhttp/AutoRequest.java

@@ -35,19 +35,19 @@ public class AutoRequest {
         ObservableRequest.getInstance(mContext, requestType, CallType.SYNC).request(url, oMap, onOkHttpListener);
     }
 
-//    public <T> void sync(Map<Object, Object> oMap, Class<T> tClass, onOkHttpListener onOkHttpListener) {
-//        ObservableRequests request = ObservableRequests.getInstance(mContext, requestType, CallType.SYNC);
-//        request.tClass = tClass;
-//        request.request(url, oMap, onOkHttpListener);
-//    }
+    public <T> void sync(Map<Object, Object> oMap, Class<T> tClass, onOkHttpListener onOkHttpListener) {
+        ObservableRequests request = ObservableRequests.getInstance(mContext, requestType, CallType.SYNC);
+        request.tClass = tClass;
+        request.request(url, oMap, onOkHttpListener);
+    }
 
     public void async(Map<Object, Object> oMap, onOkHttpListener onOkHttpListener) {
         ObservableRequest.getInstance(mContext, requestType, CallType.ASYNC).request(url, oMap, onOkHttpListener);
     }
 
-//    public <T> void async(Map<Object, Object> oMap, Class<T> tClass, onOkHttpListener onOkHttpListener) {
-//        ObservableRequests request = ObservableRequests.getInstance(mContext, requestType, CallType.ASYNC);
-//        request.tClass = tClass;
-//        request.request(url, oMap, onOkHttpListener);
-//    }
+    public <T> void async(Map<Object, Object> oMap, Class<T> tClass, onOkHttpListener onOkHttpListener) {
+        ObservableRequests request = ObservableRequests.getInstance(mContext, requestType, CallType.ASYNC);
+        request.tClass = tClass;
+        request.request(url, oMap, onOkHttpListener);
+    }
 }

+ 11 - 0
okhttplib/src/main/java/com/mylove/okhttp/DownloadObservable.java

@@ -4,6 +4,7 @@ import android.annotation.SuppressLint;
 import android.content.Context;
 import android.os.Environment;
 import android.support.annotation.NonNull;
+import android.util.Log;
 
 import java.io.File;
 import java.io.FileOutputStream;
@@ -130,6 +131,8 @@ class DownloadObservable {
                 FileOutputStream fos = null;
                 // 储存下载文件的目录
                 String savePath = isExistDir(filePath);
+                if (OkHttpInfo.isLOG)
+                    Log.d("路径", filePath);
                 try {
                     is = response.body().byteStream();
                     long total = response.body().contentLength();
@@ -141,6 +144,8 @@ class DownloadObservable {
                         fos.write(buf, 0, len);
                         sum += len;
                         int progress = (int) (sum * 1.0f / total * 100);
+                        if (OkHttpInfo.isLOG)
+                            Log.d("进度", progress + "%");
                         bean.status = 0;
                         bean.progress = progress;
                         // 下载中
@@ -151,6 +156,8 @@ class DownloadObservable {
                     bean.status = 1;
                     subscriber.onNext(bean);
                 } catch (Exception e) {
+                    if (OkHttpInfo.isLOG)
+                        Log.e("报错", e.getMessage());
                     subscriber.onError(e);
                 } finally {
                     try {
@@ -158,12 +165,16 @@ class DownloadObservable {
                             is.close();
                     } catch (IOException e) {
                         e.printStackTrace();
+                        if (OkHttpInfo.isLOG)
+                            Log.e("报错", e.getMessage());
                     }
                     try {
                         if (fos != null)
                             fos.close();
                     } catch (IOException e) {
                         e.printStackTrace();
+                        if (OkHttpInfo.isLOG)
+                            Log.e("报错", e.getMessage());
                     }
                 }
             }

+ 7 - 7
okhttplib/src/main/java/com/mylove/okhttp/ObservableRequests.java

@@ -7,6 +7,8 @@ import android.util.Log;
 
 import com.google.gson.Gson;
 
+import org.json.XML;
+
 import java.io.File;
 import java.io.IOException;
 import java.util.Map;
@@ -149,7 +151,7 @@ class ObservableRequests<T> {
                 if ((str.substring(0, 1).equals("<") || str.substring(0, 1).equals("["))
                         && (str.substring(1, 2).equals("\"") || str.substring(1, 2).equals("["))) {
                     try {
-                        subscriber.onNext((T) str);
+                        str = XML.toJSONObject(str).toString();
                     } catch (Exception e) {
                         e.printStackTrace();
                     }
@@ -158,10 +160,9 @@ class ObservableRequests<T> {
                             CacheUtils.getInstance(mContext).setCacheToLocalJson(mCacheUrl, str);
                         }
                     }
-                } else {
-                    T t = new Gson().fromJson(str, tClass);
-                    subscriber.onNext(t);
                 }
+                T t = new Gson().fromJson(str, tClass);
+                subscriber.onNext(t);
             } else {
                 String json = CacheUtils.getInstance(mContext).getCacheToLocalJson(mCacheUrl);
                 if (FormatUtil.isNotEmpty(json)) {
@@ -210,8 +211,7 @@ class ObservableRequests<T> {
                 if ((str.substring(0, 1).equals("<") || str.substring(0, 1).equals("["))
                         && (str.substring(1, 2).equals("\"") || str.substring(1, 2).equals("["))) {
                     try {
-                        //问题
-//                        str = XML.toJSONObject(str).toString();
+                        str = XML.toJSONObject(str).toString();
                     } catch (Exception e) {
                         e.printStackTrace();
                     }
@@ -381,4 +381,4 @@ class ObservableRequests<T> {
                 .post(build)
                 .build();
     }
-}
+}