AndroidStudio错误统计

本篇将描述个人在使用Android Studio时遇到的奇奇怪怪的错误

AndroidStudio错误统计

AndroidStudio Canary

  1. 在项目级中的build.gradle中添加项目依赖库,会报错

    1
    2
    3
    4
    5
    6
    allprojects {
    repositories {
    maven { url 'https://maven.google.com' }
    maven { url "https://jitpack.io" }
    }
    }
    • 大概是因为在项目级的gradle中添加的gradle版本过高,取消了allprojects{}引用

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      buildscript {
      ext.kotlin_version = "1.4.31"
      repositories {
      google()
      jcenter()
      }
      dependencies {
      //这里的gradle版本过高
      classpath "com.android.tools.build:gradle:7.0.0"
      classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
      }
      }
      //无法使用
      //allprojects {
      // repositories {
      // google()
      // jcenter()
      // maven { url "https://jitpack.io" }
      // }
      //}
      task clean(type: Delete) {
      delete rootProject.buildDir
      }
  2. AndroidStudio Canary 可与 AndroidStuid共存

    • 最好两个都下载,稳定版用来正常开发项目,测试版用来体验新功能
  3. ViewPager子页面中开启一个新的Activity,在返回会导致Fragment页面空白

    应该是因为View初始化不在onCreateView中,会导致重复初始化View,导致出错

    • 把Fragment开启懒加载,把View初始化放在onCreateView中,数据加载放在懒加载中

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      30
      31
      32
      33
      34
      35
      36
      37
      38
      39
      40
      41
      abstract class BaseFragment : Fragment() {

      private var isFirstLoad = true
      private var mView: View? = null

      protected abstract fun createView(
      inflater: LayoutInflater,
      container: ViewGroup?,
      savedInstanceState: Bundle?
      ): View

      protected abstract fun initView()

      protected abstract fun initData()

      override fun onCreateView(
      inflater: LayoutInflater,
      container: ViewGroup?,
      savedInstanceState: Bundle?
      ): View? {
      if (mView == null) {
      mView = createView(inflater, container, savedInstanceState)
      initView()
      }
      return mView
      }

      override fun onResume() {
      super.onResume()
      if (isFirstLoad) {
      initData()
      isFirstLoad = false
      }
      }

      override fun onDestroyView() {
      super.onDestroyView()
      isFirstLoad = true
      }

      }
  4. 采用RecyclerView+GSYVideoPlayer来实现抖音效果时,无法控制和销毁视频

  5. 在kolitn中使用Room。在创建数据库实体类(appDataBase)的时候,导入相应的实体类时,应使用**::class**

    1
    2
    3
    @Database(entities = [xxx::class], version = 1)
    abstract class AppDatabase : RoomDatabase() {
    }
  1. 多个Fragment使用Fragment中ViewModel(相同的ViewModel)快捷创建的ViewModel并不是同一个

    这样创建的viewModel是重新创建了一个,并不是使用之前创建的viewModel

    1
    private val viewModel by viewModels<PhotoDetailViewModel>()

    必须要这样创建才可以获取相同的viewModel

    1
    2
    private lateinit var viewModel : PhotoDetailViewModel
    viewModel = ViewModelProvider(activity as PhotoDetailActivity).get(PhotoDetailViewModel::class.java)

7.