quyunshuo / androidbaseframemvvm Goto Github PK
View Code? Open in Web Editor NEW基于 Jetpack + Kotlin 的 Android 组件化 MVVM 框架
基于 Jetpack + Kotlin 的 Android 组件化 MVVM 框架
基类通过反射获取ViewBinding和ViewModel会不会影响性能?
使用app运行时因为有AppApplication的HiltAndroidApp注解可以运行没有问题。
但,isAppMode改为true,运行模块时比如module_home,就会报Hilt异常:没有HiltAndroidApp声明!
initRequestData可以在baseactivity给一个空方法,需要的就去实现
@HiltViewModel
open class SplashViewModel @Inject constructor(private val splashRepository: SplashRepository) : BaseViewModel()
class SplashRepository @Inject constructor() : BaseRepository()
override val mViewModel: SplashViewModel by viewModels()
通过by viewModels() splashRepository这个注解不上去
我模仿着添加了一个组件,命名为:moudle_group。并添加了对应的布局。。。。
val fragments: List<Fragment> = listOf( ARouter.getInstance() .build(RouteUrl.Home.HomeFragment) .navigation() as Fragment, ARouter.getInstance() .build(RouteUrl.SubscribeAccount.SubscribeAccountFragment) .navigation() as Fragment, ARouter.getInstance() .build(RouteUrl.Group.GroupFragment) .navigation() as Fragment, ARouter.getInstance() .build(RouteUrl.Me.MeFragment) .navigation() as Fragment )
java.lang.NullPointerException: null cannot be cast to non-null type androidx.fragment.app.Fragment
上面这个位置竟然提示为空呢。程序直接闪退。去掉就没有问题。
` object Group {
/**
* 群组
*/
const val GroupFragment = "/module_group/GroupFragment"
}`
=====================================================
GroupFragment.tk文件
`@AndroidEntryPoint
@route(path = RouteUrl.Group.GroupFragment)
class GroupFragment : BaseFragment<GroupFragmentGroupBinding,EmptyViewModel>() {
override val mViewModel: EmptyViewModel by viewModels()
override fun GroupFragmentGroupBinding.initView() {
}
override fun initObserve() {
}
override fun initRequestData() {
}
}`
java.lang.IllegalStateException: Cannot invoke setValue on a background thread
提示找不到application
如题这是一个收集建议的 issue,楼主平时工作比较忙,虽有有不断的去优化框架的内容,但是一个人的能力终归是优先的,如果 xdm 有好的建议、优化、更好的实现方式、补充功能等想法,可以通过此 issue 发表一下,我会经常看大家的提议去优化框架的内容。
能不能出个详细的使用文档?
你好,为什么我的kotlin在方法注释上不会自动生成@param context Context 这一项 是需要设置的么?
Android 13
在Android Studio的模拟器上运行APP,正常的页面也会随机出现ViewBinding初始化失败,有时候正常运行,有时候出现异常。
报错内容:
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.xxx.xxx/com.xxx.xxx.main.mvvm.view.MainPageAct}: java.lang.RuntimeException: ViewBinding初始化失败
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3645)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3782)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:101)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2307)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loopOnce(Looper.java:201)
at android.os.Looper.loop(Looper.java:288)
at android.app.ActivityThread.main(ActivityThread.java:7872)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:936)
定位到基类,发现是这一段代码有问题,
fun reflexViewBinding(aClass: Class<*>, from: LayoutInflater?): V {
try {
val actualTypeArguments =
(Objects.requireNonNull(aClass.genericSuperclass) as ParameterizedType).actualTypeArguments
for (i in actualTypeArguments.indices) {
val tClass: Class
try {
tClass = actualTypeArguments[i] as Class
} catch (e: Exception) {
continue
}
if (ViewBinding::class.java.isAssignableFrom(tClass)) {
val inflate = tClass.getMethod("inflate", LayoutInflater::class.java)
return inflate.invoke(null, from) as V
}
}
return reflexViewBinding(aClass.superclass, from)
} catch (e: NoSuchMethodException) {
e.printStackTrace()
} catch (e: IllegalAccessException) {
e.printStackTrace()
} catch (e: InvocationTargetException) {
e.printStackTrace()
}
throw RuntimeException("ViewBinding初始化失败")
}
,也就是运行到这个方法时候,不知道为啥,直接throw RuntimeException("ViewBinding初始化失败")了。
求大佬指点一下。
如题!
我的返回结果类似于{"code":"200", "msg":"xxx","data": T}这种格式,T是泛型,现在使用gson的话,会出现泛型擦除,T会被解析成LinkedTreeMap,报错java.lang.ClassCastException: com.google.gson.internal.LinkedTreeMap cannot be cast to xxx.
请问大佬有没有什么比较好的解决办法?
看到你的项目,感觉写的很棒,从中有个疑问就是,你的BaseViewModel类一直没有被用到,下载你的demo看了也没有用到,所以想问下,用BaseViewmodel注意什么,有参考的demo吗
如题
最新增加的Hilt依赖注入,作者是在主模块(app模块)的AppApplication上添加@HiltAndroidApp,这样的话子模块(例如module_home)在作为单独app启动时就没有Application作为入口,就会报错,官方说的是Hilt不能只在某一个子模块中启动,例如A依赖B,在A中启动Hilt,可以找到B中的依赖注入内容,如果在B中启动Hilt,则找不到A中的依赖内容,所以我是在每个子模块中添加了单独的Application,继承自BaseApplication,作为Hilt的入口,例如
@HiltAndroidApp
class ModuleHomeApplication : BaseApplication()
再在子模块作为app启动时的AndroidManifest中指定启动的Application,建议作者考虑一下相关内容,谢谢
这个包文件夹是怎么建出来的
你好,我刚才在运行代码时,ViewModel中的请求方法里面viewModelScope.launch(Dispatchers.IO)会导致异常java.lang.IllegalStateException: Cannot invoke setValue on a background thread。
原因是catch中的isLoading.value = false不能使用setValue。
如果换成viewModelScope.launch(Dispatchers.Main)就没有问题了,请问是什么原因呢?
有没有基于这个框架写的项目案例
异常处理的时候建议把类型提到ResponseException,现在获得的异常是Exception,每次处理的时候都需要转一下,感觉不是很好,在框架处理一下可能会更好一点
请求的封装是在哪个模块下啊
请问老哥有没有适用于这个框架的,文件下载的工具类?
override fun initByFrontDesk(): InitDepend {
val worker = mutableListOf<() -> String>()
val main = mutableListOf<() -> String>()
// 以下只需要在主进程当中初始化 按需要调整
if (ProcessUtils.isMainProcess(BaseApplication.context)) {
worker.add { initMMKV() }
worker.add { initARouter() } //放到这里可能会初始化失败
}
worker.add { initTencentBugly() }
return InitDepend(main, worker)
}
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.