1
0
drake 5 жил өмнө
parent
commit
58bf2fc972

+ 83 - 7
README.md

@@ -300,28 +300,49 @@ fun <M> Observable<M>.dialog(
 
 需要引入第三方库: [BRV](https://github.com/liangjingkanji/BRV)
 
+```kotlin
+pageRefreshLayout.onRefresh { 
+    post<Model>("/path"){
+        param("key", "value")
+        param("page", index) // 页面索引使用pageRefreshLayout的属性index
+    }.page(page) {
+        if (it.data.isEmpty()){
+            showEmpty()
+            return
+        }
+        addData(it.data){
+            index < it.data.totalPage // 判断是否存在下一页
+        }
+    } 
+}
+```
 
+此时下拉和上拉都会调用该回调`onRefresh`中的接口请求. 
 
-```kotlin
-post<Model>(""){
-  file("file", File("path"))
-}.page(page) {
+如果下拉刷新和上拉加载的接口不一致可以再实现`onLoadMore`回调
 
+```kotlin
+pageRefreshLayout.onLoadMore {
+	// 上拉加载网络请求
 }
 ```
 
 
 
+
+
 某些情况存在一些页面仅仅需要下拉刷新, 不需要分页/缺省页/上拉加载, 例如用户中心的刷新. 这个时候我们应该使用`refresh`函数而不是`page`.
 
 ```
 post<Model>(""){
-  file("file", File("path"))
+  param("key", "value")
 }.refresh(smartRefreshLayout) {
 
 }
 ```
 
+
+
 refresh函数
 
 ```kotlin
@@ -372,7 +393,7 @@ post<Model>(""){
 
 会根据参数的不同而给不同的对象添加缺省页状态
 
-##重写Observer
+##重写 Observer
 
 无论是`page/refresh/net/dialog`这些函数本身都是快速创建Observer的扩展函数而已, 如果你需要拿到Observer的onError/onCompleted等回调请自己创建匿名类或者继承.
 
@@ -393,4 +414,59 @@ fun <M> Observable<M>.page(
 }
 ```
 
-所有扩展订阅函数的都在`ObserverUtils`类中
+所有扩展订阅函数的都在`ObserverUtils`类中
+
+
+
+## 请求和响应规范
+
+很多时候存在请求和响应的后台接口规范不是常规统一的, 这个时候我们可以自己拦截处理数据. 
+
+主要是实现拦截器(`Interceptor`)和转换器(`Convert`)
+
+
+
+Interceptor 这个和Okhttp同样, 可以拦截和修改请求参数, 并且可以获得Response的实例.
+
+### Interceptor
+
+这里可以得到Request和Response, 进行数据添加修改以及重新拼装请求, 不熟悉的请搜索Okhttp Interceptor使用.
+
+### Convert
+
+Convert 主要进行数据转换, 这里一般解析JSON对象.
+
+
+
+这就是实现`DefaultConvert`自己解析Json对象. DefaultConverter是框架中定义的一个默认处理JSON示例, 一般情况使用它解析下JSON即可. 
+
+```kotlin
+initNet("http://localhost.com") {
+    converter(object : DefaultConverter() {
+        override fun <S> convert(succeed: Type, body: String): S? {
+            return Moshi.Builder().build().adapter<S>(succeed).fromJson(body)
+        }
+    })
+}
+```
+
+DefaultConvert构造函数拥有三个参数默认值
+
+```kotlin
+abstract class DefaultConverter(
+    val successCode: String = "0",
+    val codeName: String = "code",
+    val msgName: String = "msg"
+)
+```
+
+因为内部需要得到错误码`codeName`来判断请求是否真正成功以及错误消息`msgName`来在错误的时候进行打印吐司错误信息. 
+
+所以需要知道解析JSON时的Key来获取.
+
+
+
+如果涉及到响应的JSON数据需要解密或者错误码为某个数字时跳转登录界面可以直接重写`Convert`(建议复制参考DefaultConvert源码). 
+
+
+

+ 1 - 1
net/build.gradle

@@ -40,7 +40,7 @@ dependencies {
     api 'com.yanzhenjie:okalle:0.1.7'
 
     compileOnly 'androidx.appcompat:appcompat:1.1.0'
-    compileOnly 'com.github.liangjingkanji:BRV:1.0.9'
+    compileOnly 'com.github.liangjingkanji:BRV:1.1.0'
 
     compileOnly 'io.reactivex.rxjava2:rxkotlin:2.3.0'
     compileOnly 'io.reactivex.rxjava2:rxandroid:2.1.1'

+ 1 - 1
net/src/main/java/com/drake/net/convert/DefaultConverter.kt

@@ -26,7 +26,7 @@ import java.lang.reflect.Type
  */
 @Suppress("UNCHECKED_CAST")
 abstract class DefaultConverter(
-    val successCode: String = "1",
+    val successCode: String = "0",
     val codeName: String = "code",
     val msgName: String = "msg"
 ) : Converter {

+ 1 - 1
sample/build.gradle

@@ -38,7 +38,7 @@ dependencies {
 
     implementation 'com.squareup.moshi:moshi-kotlin:1.8.0'
     kapt 'com.squareup.moshi:moshi-kotlin-codegen:1.8.0'
-    implementation 'com.github.liangjingkanji:BRV:1.0.8'
+    implementation 'com.github.liangjingkanji:BRV:1.1.0'
     implementation 'io.reactivex.rxjava2:rxkotlin:2.3.0'
     implementation 'io.reactivex.rxjava2:rxandroid:2.1.1'
 }

+ 7 - 0
sample/src/main/java/com/drake/net/sample/MainActivity.kt

@@ -2,6 +2,8 @@ package com.drake.net.sample
 
 import android.os.Bundle
 import androidx.appcompat.app.AppCompatActivity
+import com.drake.brv.utils.page
+import kotlinx.android.synthetic.main.activity_main.*
 
 class MainActivity : AppCompatActivity() {
 
@@ -9,5 +11,10 @@ class MainActivity : AppCompatActivity() {
         super.onCreate(savedInstanceState)
         setContentView(R.layout.activity_main)
 
+        content.page().onRefresh {
+
+        }
+
+
     }
 }

+ 1 - 0
sample/src/main/res/layout/activity_main.xml

@@ -3,6 +3,7 @@
     xmlns:app="http://schemas.android.com/apk/res-auto"
     xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="match_parent"
+    android:id="@+id/content"
     android:layout_height="match_parent"
     tools:context=".MainActivity">