From c10d8b688fd721808b751f0df747f7bbcd92a54b Mon Sep 17 00:00:00 2001 From: Li ZongYing Date: Mon, 8 Jan 2024 20:07:53 +0800 Subject: [PATCH] add retry --- README.md | 5 ++ app/src/main/AndroidManifest.xml | 3 +- .../main/java/com/lizongying/mytv/Request.kt | 53 +++++++++--------- .../com/lizongying/mytv/models/TVViewModel.kt | 2 + app/src/main/res/drawable/banner.png | Bin 0 -> 13098 bytes 5 files changed, 33 insertions(+), 30 deletions(-) create mode 100644 app/src/main/res/drawable/banner.png diff --git a/README.md b/README.md index 2086a0f..ad62894 100644 --- a/README.md +++ b/README.md @@ -14,6 +14,11 @@ ## 更新日志 +### v1.3.2 + +* 增加重试,减少因网络问题导致的播放失败 +* 优化横幅banner + ### v1.2.6 * 支持安卓4.2 diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index e7731fb..f76b90f 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -12,12 +12,11 @@ android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" - android:usesCleartextTraffic="true" android:theme="@style/Theme.MyTV"> ) { - yspTokenService.getInfo() - .enqueue(object : Callback { - override fun onResponse(call: Call, response: Response) { - if (response.isSuccessful) { - val info = response.body() - token = info?.data?.token - Log.i(TAG, "info success $token") - } else { - Log.e(TAG, "info status error") - } - fragmentReady() - } - - override fun onFailure(call: Call, t: Throwable) { - Log.e(TAG, "info request error $t") - fragmentReady() - } - }) - } - fun fetchVideo(tvModel: TVViewModel, cookie: String) { if (::myRunnable.isInitialized) { handler.removeCallbacks(myRunnable) @@ -150,26 +128,38 @@ class Request { Log.i(TAG, "$title url $url") tvModel.addVideoUrl(url) tvModel.allReady() - + tvModel.retryTimes = 0 myRunnable = MyRunnable(tvModel) handler.post(myRunnable) } else { Log.e(TAG, "$title key error") - tvModel.firstSource() + if (tvModel.retryTimes < tvModel.retryMaxTimes) { + tvModel.retryTimes++ + fetchData(tvModel) + } } } else { Log.e(TAG, "$title url error $request") - tvModel.firstSource() + if (tvModel.retryTimes < tvModel.retryMaxTimes) { + tvModel.retryTimes++ + fetchData(tvModel) + } } } else { Log.e(TAG, "$title status error") - tvModel.firstSource() + if (tvModel.retryTimes < tvModel.retryMaxTimes) { + tvModel.retryTimes++ + fetchData(tvModel) + } } } override fun onFailure(call: Call, t: Throwable) { Log.e(TAG, "$title request error") - tvModel.firstSource() + if (tvModel.retryTimes < tvModel.retryMaxTimes) { + tvModel.retryTimes++ + fetchData(tvModel) + } } }) } @@ -207,11 +197,19 @@ class Request { fetchVideo(tvModel, cookie) } else { Log.e(TAG, "info status error") + if (tvModel.retryTimes < tvModel.retryMaxTimes) { + tvModel.retryTimes++ + fetchData(tvModel) + } } } override fun onFailure(call: Call, t: Throwable) { Log.e(TAG, "info request error $t") + if (tvModel.retryTimes < tvModel.retryMaxTimes) { + tvModel.retryTimes++ + fetchData(tvModel) + } } }) } else { @@ -251,7 +249,6 @@ class Request { // Log.d(TAG, "$title kvcollect success") } else { Log.e(TAG, "$title kvcollect status error") - tvModel.firstSource() } } diff --git a/app/src/main/java/com/lizongying/mytv/models/TVViewModel.kt b/app/src/main/java/com/lizongying/mytv/models/TVViewModel.kt index f58890b..e4ee541 100644 --- a/app/src/main/java/com/lizongying/mytv/models/TVViewModel.kt +++ b/app/src/main/java/com/lizongying/mytv/models/TVViewModel.kt @@ -19,6 +19,8 @@ class TVViewModel(private var tv: TV) : ViewModel() { private var rowPosition: Int = 0 private var itemPosition: Int = 0 + var retryTimes: Int = 0 + var retryMaxTimes: Int = 3 var programUpdateTime: Long = 0 private val _programId = MutableLiveData() diff --git a/app/src/main/res/drawable/banner.png b/app/src/main/res/drawable/banner.png new file mode 100644 index 0000000000000000000000000000000000000000..09b5324d5f03e1606c9009fc7384535910e91f61 GIT binary patch literal 13098 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 Uw8#HX{PICoQc0pp4CMd60L!F02mk;8 literal 0 HcmV?d00001