Skip to content

Commit

Permalink
完善下载Client
Browse files Browse the repository at this point in the history
并增加下载示例此代码为1.0_beta
  • Loading branch information
yipangzhou committed Sep 27, 2018
1 parent b11ac70 commit 1606493
Show file tree
Hide file tree
Showing 25 changed files with 1,547 additions and 108 deletions.
Binary file modified .idea/caches/build_file_checksums.ser
Binary file not shown.
8 changes: 8 additions & 0 deletions .idea/file.template.settings.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

31 changes: 31 additions & 0 deletions .idea/inspectionProfiles/Project_Default.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 2 additions & 1 deletion app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ android {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
buildToolsVersion '28.0.2'
}

dependencies {
Expand All @@ -53,5 +54,5 @@ dependencies {
implementation 'io.reactivex:rxjava:1.2.1'
implementation 'io.reactivex:rxandroid:1.2.1'
implementation 'com.squareup.retrofit2:adapter-rxjava:2.1.0'
compile project(path: ':retrofitclient')
implementation project(path: ':retrofitclient')
}
15 changes: 9 additions & 6 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
@@ -1,12 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="cn.ypz.com.retrofitclientmaster">

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />


<application
android:name=".MyAppliaction"
android:allowBackup="true"
Expand All @@ -18,7 +22,6 @@
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
Expand Down
118 changes: 71 additions & 47 deletions app/src/main/java/cn/ypz/com/retrofitclientmaster/MainActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -3,75 +3,99 @@ package cn.ypz.com.retrofitclientmaster
import android.os.Bundle
import android.support.v7.app.AppCompatActivity
import android.util.Log
import cn.ypz.com.retrofitclient.client.DownLoadClient
import cn.ypz.com.retrofitclient.client.RetrofitClient
import cn.ypz.com.retrofitclient.client.RxApiSubscriptionManger
import cn.ypz.com.retrofitclient.downLoad.DownLoadManager
import cn.ypz.com.retrofitclient.downLoad.FileBaseResponseBody
import cn.ypz.com.retrofitclient.downLoad.FileDowanloadProgress
import cn.ypz.com.retrofitclient.retrofitClientException.RetrofitClientBaeApiException
import cn.ypz.com.retrofitclient.transformEmitter.ObserverTransformEmitter
import com.google.gson.Gson
import kotlinx.android.synthetic.main.activity_main.*
import okhttp3.ResponseBody

class MainActivity : AppCompatActivity() {

/**
* 因为涉及到了断点下载以及普通请求
* 上传代码没法演示在商业使用服务器不能暴露请求接口
* 本代码皆由本人易庞宙
* */
private lateinit var longlist: LongArray

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
/**
* 单线程下载
* 线程下载示例
* */
click.setOnClickListener {
RetrofitClient.getmInstance().setBaseUrl("http://github.com//KilleTom/").initRetrofit(application)
val test = RetrofitClient.getmInstance().create(Test::class.java)
RxApiSubscriptionManger.getRxApiSubscriptionManger().add("downLoadDemo",
RetrofitClient.getmInstance().easliyDownLoadSubscription(test.getFile("identity"),
object : ObserverTransformEmitter<ResponseBody, RetrofitClientBaeApiException>() {
override fun call(t: ResponseBody?) {
val fileBaseResponseBody = object : FileDowanloadProgress {
override fun dowanloadProgress(readLength: Long, contentLength: Long) {
logI("已下载长度:$readLength")
logI("请求下载文件长度:$contentLength")
logI("Percentage(百分比):" + (readLength.toDouble() / contentLength * 100).toString() + "%")
setMessage("已下载长度:$readLength\n请求下载文件长度:$contentLength\n" + "Percentage(百分比):" + (readLength.toDouble() / contentLength * 100).toString() + "%")
}

override fun dowanloadDone(done: Boolean) {
logI("文件下载完成")
}
}
DownLoadManager("myGitHub.zip", this@MainActivity.filesDir.path + "/dowland",
this@MainActivity, true,
"易庞宙—killeTom").isFinshWrittingtoDisk(FileBaseResponseBody(t, fileBaseResponseBody))
}

override fun failed(retCode: Int, msg: String?) {

}
}
))
downloadFile()
}
/**
* 普通网络请求
* */
click.setOnClickListener {
RetrofitClient.getmInstance().setBaseUrl("http://v.juhe.cn/toutiao/").initRetrofit(this)
RxApiSubscriptionManger.getRxApiSubscriptionManger().add(
"NewsResult", RetrofitClient.getmInstance().easliySubscription(
RetrofitClient.getmInstance().create(Test::class.java).getNews("shehui", "13728f03ef29af183184d6d30dc6ae43"),
object : ObserverTransformEmitter<NewsResult, RetrofitClientBaeApiException>() {
override fun call(t: NewsResult?) {
setMessage(Gson().toJson(t))
}
news.setOnClickListener { getNews() }


}

fun downloadFile() {
lateinit var isDownload: BooleanArray
lateinit var longlist: LongArray
DownLoadClient.getDownLoadClient().initApplicationContext(this).downLoadClientConfig.setChangeBaseUrl("http://github.com//KilleTom/").setFileUrl("KilleTomRxMaterialDesignUtil/archive/master.zip").setDebug(true).setLogTag("易庞宙—killeTom").setDownLoadThreadsSize(1).setFileName("myGitHub.zip").setFileSavePath(this@MainActivity.filesDir.path + "/dowland").downStart(
DownLoadClient.RequestWay.REQUEST_POST,
{ code, callMessage -> logI("code:$code\nMessage:$callMessage") },
object : DownLoadClient.DownloadListener {
//文件下载百分比比回调
override fun filePercent(contentData: Long, downloadData: Long, Percent: Double) {

}

override fun failed(retCode: Int, msg: String?) {
logI("failedCode:$retCode\nMessage:$msg")
setMessage("failedCode:$retCode\nMessage:$msg")
//文件下载完成回调
override fun fileFinshDone() {
logI("done")
}

//每一个线程下载的数据回调
override fun callData(index: Int, indexChangeData: Long, contentData: Long, rangeSize: Int) {
longlist[index] = indexChangeData
logI("index:$index\nindexChangeData:$indexChangeData\ncontentData:$contentData\nrangeSize:$rangeSize")
}

//下载的前的回调
override fun rangeListInit(rangeSize: Int) {
longlist = LongArray(rangeSize, init = { 0 })
isDownload = BooleanArray(rangeSize, init = { false })
}

//每个线程下载完成会的回调。多线程有多次回调、单线程只回调一次
override fun done(index: Int, isDone: Boolean, rangeSize: Int) {
isDownload[index] = isDone
var isAllDone = true
isDownload.forEach { b: Boolean -> if (!b) isAllDone = b }
if (isAllDone) {
logI("done")
}
}
})
}

}))
}
fun getNews() {
RetrofitClient.getmInstance().setBaseUrl("http://v.juhe.cn/toutiao/").initRetrofit(this)
RxApiSubscriptionManger.getRxApiSubscriptionManger().add(
"NewsResult",
RetrofitClient.getmInstance().easliySubscription(
RetrofitClient.getmInstance().create(Test::class.java).getNews(
"shehui", "13728f03ef29af183184d6d30dc6ae43"),
object : ObserverTransformEmitter<NewsResult, RetrofitClientBaeApiException>() {
override fun call(t: NewsResult?) {
setMessage(Gson().toJson(t))
}

override fun failed(retCode: Int, msg: String?) {
logI("failedCode:$retCode\nMessage:$msg")
setMessage("failedCode:$retCode\nMessage:$msg")
}

}))
}

override fun onDestroy() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
public class MyAppliaction extends Application {

private Context context;

@Override
public void onCreate() {
super.onCreate();
Expand All @@ -18,7 +19,14 @@ public void onCreate() {
setBaseUrl("").
setRetrofitClientLog(true, "").
setOkHttpConnectTimeOut(10, TimeUnit.SECONDS).
setOKHttpReadTimeOut(10, TimeUnit.SECONDS).
setOkHttpWriteTimeOut(10, TimeUnit.SECONDS).
setOpenDebugLogMessage(true).
initRetrofit(getApplicationContext());
/* Test test = RetrofitClient.getmInstance().create(Test.class);*/




/* Test test = RetrofitClient.getmInstance().create(Test.class);*/
}
}
2 changes: 2 additions & 0 deletions app/src/main/java/cn/ypz/com/retrofitclientmaster/Test.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,15 @@
import retrofit2.http.GET;
import retrofit2.http.Header;
import retrofit2.http.Query;
import retrofit2.http.Streaming;
import rx.Observable;

public interface Test {

@GET("index")
Observable<NewsResult> getNews(@Query("type") String type, @Query("key") String key);

@Streaming
@GET("KilleTomRxMaterialDesignUtil/archive/master.zip")
Observable<ResponseBody> getFile(@Header("Accept-Encoding")String header);

Expand Down
2 changes: 2 additions & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ buildscript {
classpath 'com.android.tools.build:gradle:3.1.4'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath 'com.github.dcendents:android-maven-gradle-plugin:2.0'
classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
Expand All @@ -21,6 +22,7 @@ allprojects {
jcenter()
maven { url 'https://jitpack.io' }
}

}

task clean(type: Delete) {
Expand Down
2 changes: 2 additions & 0 deletions gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -11,3 +11,5 @@ org.gradle.jvmargs=-Xmx1536m
# This option should only be used with decoupled projects. More details, visit
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
# org.gradle.parallel=true
android.injected.testOnly=false

23 changes: 13 additions & 10 deletions retrofitclient/build.gradle
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
apply plugin: 'com.android.library'
apply plugin: 'com.github.dcendents.android-maven'
apply plugin: 'org.greenrobot.greendao'
group = 'com.github.1986545332@qq.com'
android {
compileSdkVersion 28

defaultConfig {
minSdkVersion 19
targetSdkVersion 28
Expand All @@ -13,20 +13,25 @@ android {
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"

}

buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}

compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
buildToolsVersion '28.0.2'
}
greendao{
schemaVersion 1 //数据库版本号 每次升级数据库都需要改变版本,只能增加
daoPackage 'cn.ypz.com.retrofitclient.db' //设置DaoMaster、DaoSession、Dao包名
/* targetGenDir 'src/main/java' */ //设置DaoMaster、DaoSession、Dao目录
//targetGenDirTest:设置生成单元测试目录
//generateTests:设置自动生成单元测试用例
}

dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
testImplementation 'junit:junit:4.12'
Expand All @@ -35,7 +40,7 @@ dependencies {
/*okHttp配置*/
implementation 'com.squareup.okhttp3:okhttp:3.11.0'
implementation 'com.squareup.okio:okio:2.0.0-RC1'
implementation 'com.squareup.okhttp3:logging-interceptor:3.4.1'
implementation 'com.squareup.okhttp3:logging-interceptor:3.9.0'
implementation 'com.google.code.gson:gson:2.8.5'
/*Rx+Retrofit配置*/
implementation('com.squareup.retrofit2:retrofit:2.4.0') {
Expand All @@ -45,10 +50,8 @@ dependencies {
exclude group: 'com.google.code.gson'
exclude group: 'com.squareup.okhttp3'
}
implementation 'io.reactivex:rxjava:1.2.1'
implementation 'io.reactivex:rxjava:1.3.0'
implementation 'io.reactivex:rxandroid:1.2.1'
implementation 'com.squareup.retrofit2:adapter-rxjava:2.1.0'



implementation 'com.squareup.retrofit2:adapter-rxjava:2.3.0'
implementation 'org.greenrobot:greendao:3.2.2'
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package cn.ypz.com.retrofitclient.client;

import okhttp3.ResponseBody;
import retrofit2.http.GET;
import retrofit2.http.Header;
import retrofit2.http.POST;
import retrofit2.http.Streaming;
import retrofit2.http.Url;
import rx.Observable;

public interface DownLoadApi {

@Streaming
@POST
Observable<ResponseBody> postFile(@Header("Accept-Encoding")String header, @Url String fileUrl);

@Streaming
@GET
Observable<ResponseBody> getFile(@Header("Accept-Encoding")String header, @Url String fileUrl);

@Streaming
@POST
Observable<ResponseBody> postFile(@Header("Accept-Encoding")String header, @Url String fileUrl, @Header("Accept-Ranges")String range);


@Streaming
@GET
Observable<ResponseBody> getFile(@Header("Accept-Encoding")String header, @Url String fileUrl, @Header("Accept-Ranges")String range);

}
Loading

0 comments on commit 1606493

Please sign in to comment.