@MyApiService(
mName = "API",//给接口起个名成,随后可以通过这个名称直接调用接口的方法。
mPath = "http://www.chenliang.com/app/",//成产环境
mDevPath = "http://www.chenliang.com/dev/app/",//开发环境
mTestPath = "http://www.chenliang.com/test/app/"//测试环境
)
interface ApiService {
@MyRetrofitGo(mTag = "登录", mLoading = true,mCache = false ,mFailToast = true,mSuccessCode = 1001)
@POST("home/login")
fun login(
@Query("account") account: String,
@Query("password") password: String
): Data
}
mPath = "http://www.chenliang.com/app/",//成产环境
mDevPath = "http://www.chenliang.com/dev/app/",//开发环境
mTestPath = "http://www.chenliang.com/test/app/"//测试环境
class AccountViewModel : MyBaseViewModel() {
fun login(account: String, pass: String) = go { API.login(account, pass) }
}
@MyClass(mToolbarTitle = "登录")
@MyRoute(mPath = "/account/Login")
class LoginActivity : MyBaseActivity() {
var user = BeanUser()
override fun initCreate() {
mBinding.user = user
//监听编辑框输入状态,手机号设置成130 7876 7657 格式
account.changed { account.setText(it.insert(" ", 3, 7)) }
}
//去注册
fun registerAction() { goto(RegisterActivity::class.java, "user", user) }
fun loginAction() {
//登录验证
if (user.name.check(MyCheck.empty, "请输入账号", MyCheck.mobilePhone, "手机号格式不正确") ||
user.password.check(MyCheck.empty, "请输入密码", MyCheck.LENGTH(6, 12), "密码长度在6-12之间")
) return
//登录接口
mViewModel.login(user.name, user.password).obs(this@LoginActivity) { it.y { loginSuccess(it) } }
}
private fun loginSuccess(user: BeanUser) {
user.save()//把登录后user数据保存到sp
goto(appMain)//跳转到Main界面
finish()
}
//注册后,登录界面回显账号信息
@Subscribe(code = 100)
fun eventRegister(user: BeanUser) {
this.user = user
user.password = ""
mBinding.user = user
}
}
//跨组件--->跳转到目标页【跨组件,建议使用path跳转,当然,也可以使用class跳转】
goto("/app/main", "username", "tom", "age", 15)
goto("/app/fragment", "user",user)
//组件内--->跳转到目标页【组件内,建议使用class跳转,当然,也可以使用path跳转】
goto(MainActivity::class.java, "username","tom", "id","UID121231","age", 15 ,"sex",2)
goto(UserFragment::class.java, , "user",user,"param1", "value1","param2",vlue2, "param3", true ,"param4",2F,......)//想传递几个值,后面跟上即可
//目标Activity or Fragment参数接收
@MyField(mKey = "beanUser")//指定key为:beanUser
lateinit var user: BeanUser
@MyField(mKey = "param1")//指定key为:param1
lateinit var param1: String
@MyField//默认key为变量名称param2
lateinit var param2: String
//仅发送数据
var user=BeanUser("tom",12)
user.postSelf(1002)
//仅接受数据
@Subscribe(code = 1002)
fun eventRegister(user: BeanUser) {
//接收到user
}
//发送数据、并且回调接收数据
var user=BeanUser("tom",12)
user.postSelf(1002){
mytoast(it.getStringExtra("message")!!)
}
//接受数据,并且回调数据给发送者
@Subscribe(code = 100)
fun eventCallBack(event: RxBusEvent) {
mytoast("消息收到${event.data.toJson}")
event.callback("message", "回调成功")
}
MyDialog().message("确定删除用户?")
.y { toast("确定被点击") }
.n { toast("取消被点击") }
.show(this)
//或者
dialog("确定删除用户?")
.y { toast("确定被点击") }
.n { toast("取消被点击") }
.show(this)
MyDialog().message("确定提交订单?")
.y("提交") { toast("提交被点击") }
.n("关闭") { toast("关闭被点击") }
.show(this)
//或者
dialog("确定删除用户?")
.y("提交") { toast("提交被点击") }
.n("关闭") { toast("关闭被点击") }
.show(this)
@MyClass(mDialogGravity = Gravity.BOTTOM, mDialogTransparent = true ,mDialogAnimation = true,mDialogAnimationTime = 300)
class DialogDemo : MyBaseDialog() {
override fun initCreate() {
mRootView.confirm.click { dismiss() }
}
}
refreshRecycler.bindData { (it.binding as ItemRecyclerviewBinding).item = it }
refreshRecycler.loadData { httpGetData() }
@MyRoute(mPath = "/account/login")
class LoginActivity : MyBaseActivity() {//Activity
.
.
.
.
}
@MyRoute(mPath = "/account/register")
class RegisterActivity : MyBaseActivity() {//Activity
.
.
.
.
}
@MyRoute(mPath = "/account/my")
class MyFragment : MyBaseFragment() {//Fragment
.
.
.
.
}
各个组件会自动生成路由配置管理类MyRoutePath
public object MyRoutePath {
public val accountLogin: String = "/account/Login|com.chenliang.account.act.LoginActivity"
public val accountRegister: String = "/account/Register|com.chenliang.account.act.RegisterActivity"
public val accountMy: String = "/account/my|com.chenliang.account.fragment.MyFragment"
}
路由跳转,比如由app Module组件跳到Account Module组件的登录Activity,直接调用如下代码:
goto(accountLogin)
class MyConfig {
@MySpConfig
var isLogin = false;
@MySpConfig
var isFirst = false
@MySpConfig
var ohter = ""
}
public object MySp {
public fun setLogin(login: Boolean): Unit {
MySpUtis.putBoolean("isLogin", login)
}
public fun isLogin(): Boolean = MySpUtis.getBoolean("isLogin")
public fun setFirst(first: Boolean): Unit {
MySpUtis.putBoolean("isFirst", first)
}
public fun isFirst(): Boolean = MySpUtis.getBoolean("isFirst")
public fun setOhter(ohter: String): Unit {
MySpUtis.putString("ohter", ohter)
}
public fun isFirst(): String = MySpUtis.getString("ohter")
}
很多开发者以前根本就没有接触过组件化开发,对其中的技巧和用法不是很了解,考虑到这些问题,在这特别准备了《Android组件化强化实战》 帮助大家去熟知该功能的应用。
https://qr21.cn/CaZQLo?BIZ=ECOMMERCE
https://qr21.cn/CaZQLo?BIZ=ECOMMERCE