Giter Site home page Giter Site logo

quyunshuo / androidbaseframemvvm Goto Github PK

View Code? Open in Web Editor NEW
1.2K 1.2K 184.0 562 KB

基于 Jetpack + Kotlin 的 Android 组件化 MVVM 框架

Kotlin 59.40% Java 40.60%
android-jetpack androidx arouter buildsrc eventbus hilt-android kotlin kotlin-coroutines kotlin-coroutines-flow lifecycle livedata mmkv mvvm-android mvvm-jetpack okhttp3 permissionx retrofit2 spi viewbinding viewmodel

androidbaseframemvvm's Introduction

androidbaseframemvvm's People

Contributors

bimromatic avatar dboy233 avatar quyunshuo avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

androidbaseframemvvm's Issues

java.lang.NullPointerException: null cannot be cast to non-null type androidx.fragment.app.Fragment

我模仿着添加了一个组件,命名为: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 )

ARouter.getInstance()
.build(RouteUrl.Group.GroupFragment)
.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() {
}

}`

buildSrc

这个包文件夹是怎么建出来的

文件下载

请问老哥有没有适用于这个框架的,文件下载的工具类?

demo翻译闪退

java.lang.IllegalStateException: Cannot invoke setValue on a background thread

你好,有个疑问

看到你的项目,感觉写的很棒,从中有个疑问就是,你的BaseViewModel类一直没有被用到,下载你的demo看了也没有用到,所以想问下,用BaseViewmodel注意什么,有参考的demo吗

Dispatchers.IO异常

你好,我刚才在运行代码时,ViewModel中的请求方法里面viewModelScope.launch(Dispatchers.IO)会导致异常java.lang.IllegalStateException: Cannot invoke setValue on a background thread。
原因是catch中的isLoading.value = false不能使用setValue。
如果换成viewModelScope.launch(Dispatchers.Main)就没有问题了,请问是什么原因呢?

收集建议的 issue

如题这是一个收集建议的 issue,楼主平时工作比较忙,虽有有不断的去优化框架的内容,但是一个人的能力终归是优先的,如果 xdm 有好的建议、优化、更好的实现方式、补充功能等想法,可以通过此 issue 发表一下,我会经常看大家的提议去优化框架的内容。

如果返回结果包含泛型

如题!
我的返回结果类似于{"code":"200", "msg":"xxx","data": T}这种格式,T是泛型,现在使用gson的话,会出现泛型擦除,T会被解析成LinkedTreeMap,报错java.lang.ClassCastException: com.google.gson.internal.LinkedTreeMap cannot be cast to xxx.
请问大佬有没有什么比较好的解决办法?

ARouter初始化失败的问题

    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)
    }

ViewBinding初始化失败

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初始化失败")了。

求大佬指点一下。

使用模块运行模式时依赖HiltAndroidApp

使用app运行时因为有AppApplication的HiltAndroidApp注解可以运行没有问题。
但,isAppMode改为true,运行模块时比如module_home,就会报Hilt异常:没有HiltAndroidApp声明!

Hilt非App模式(单模块)启动时的使用问题

最新增加的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,建议作者考虑一下相关内容,谢谢

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.