《第一行代码》纯小白踩坑记①——使用litepal时,程序崩溃

《第一行代码》纯小白踩坑记①——使用litepal时,程序崩溃

前言

使用CSDN也有快一年的时间了,但作为一个纯纯(蠢蠢)的小白,之前都是利用CSDN查一些报错的解决方法或者demo案例,吸收大神的经验,自己从来没有发过博客也没有发的想法,所以目前写的这篇也将成为我在CSDN上的第一篇博客。

作为一名非计算机专业大二学生,我的编程能力实在非常有限,连一些非常低级的错误都一直在犯,更不用说去分析一些bug背后的产生原因了。因此,我的博客肯定没有大神解释的那么清楚,很多时候只能够根据我自己的踩坑经验给出一个解决方案,这就是我当前能力下能做到的事情了。当然,如果后面有能力,我会尽力把每个问题都写得详细一点,报错信息,错误产生的原因,解决方案,涉及到的概念等都会包含进去。不过这也是后话了,先在这里定个小目标记录一下吧。

这个学期在学android开发,使用的教材是《第一行代码》(第二版),作者是郭霖大神,这本书真的强烈推荐,堪称小白圣经,只要读过几段,就能明白对于小白来说这是一本多么宝贵的教材。所以,我这个系列的博客也是基于我的学习过程,把学习中踩过的坑记录一下,并分享我的解决方案给和我一样挣扎中的小白。内容真的很小白向,主要是为了让大家少踩坑,踩了坑也能快速找到解决方案,欢迎大家交流,有可能的话也希望大神在评论区指点一下

遇到的问题:使用litepal时,程序崩溃

可能是因为第一篇博客,前面废话有点多了,我们就快点进入正题吧。

这次的问题是我在学习《第一行代码》(第二版)的第六章,数据存储技术时遇到的。学习了利用SQLite数据库自带的对象SQLiteDatabase来操作SQLite数据库后,郭大神又介绍了另一种更简便的数据库操作方式:使用LitePal。关于LitePal的概念和一些使用配置方法,大家可以参考这篇博客:[https://blog.csdn.net/weixin_39241397/article/details/79438180],它是对《第一行代码》这部分内容的整理,从中大家也可以发现郭大神有多体贴小白。

一波常规操作,照着书上的代码敲完之后运行,突然发现程序直接崩溃,更别说创建数据库了,因此直接CSDN走起,查了一会,发现也没什么很直接的解决方法,这时候我看到了我的报错信息。。。(我不习惯查Android Studio的日志,这真的很不好,需要去学习下怎么查日志,方便看报错信息),结果如下:
Caused by: org.litepal.exceptions.InvalidAttributesException: dbname is empty or not defined in litepal.
这里有两个可能,数据库名为空或者数据库没有在litepal.xml里面定义。数据库名没问题,照着书上的代码肯定是定义过了的,只剩下数据库定义错误的问题。但是我查了一下litepal(这里有坑)文件,里面也是定义好了的。。。。
《第一行代码》纯小白踩坑记①——使用litepal时,程序崩溃_第1张图片
然后又去CSDN查了一会,终于找到了原因,我把启发我的那篇博客也贴一下:
[(https://blog.csdn.net/pf962376801/article/details/7118910)]
就像这篇博客里说的,问题在于litepal文件莫得xml后缀,我去查看了一下,还真没有(害,蠢蠢的小白)。

(这是我加上之后的,原来没有后缀!)

解决方案

很简单,加上后缀名就可以。加上后缀名有两种方式,我都尝试过,第一种有点坑,我推荐使用第二种,简单方便,不会出错。
第一种就是直接Rename,如下所示
《第一行代码》纯小白踩坑记①——使用litepal时,程序崩溃_第2张图片
在弹窗中输入litepal.xml即可,然后点击Refactor就能修改名称。如果左下角有弹窗,直接点Do Refactor就行。出现这个信息,我看了下它的提示,猜测原因是litepal这个名称在别的地方也在使用,比如你的MainActivity.java里,所以Android Studio提示要谨慎操作。
《第一行代码》纯小白踩坑记①——使用litepal时,程序崩溃_第3张图片
但是!!!!采用这种方法会导致build.gradle更改,需要重新Sync,但是重新Sync后也不对。因为是事后记录,所以图没法放上来了,抱歉了。我遇到了这个问题,不知道大家是否有遇到,我把我的build.gradle文件的代码贴上来,希望能给大家一点启发(因为出现这个问题的原因我是真不知道了)

apply plugin: 'com.android.application'

android {
    compileSdkVersion 26
    buildToolsVersion "29.0.3"
    defaultConfig {
        applicationId "com.example.litepaltest"
        minSdkVersion 15
        targetSdkVersion 26
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support:appcompat-v7:26.+'
    testCompile 'junit:junit:4.12'
    compile'org.litepal.android:core:1.4.1'
}

所以我采用了第二种方式:直接新建一个文件。
建litepal.xml文件的方法在上面的第一个链接中有讲到,我就不重复了,大家去CSDN上查一下也很快就能得到结果。
我直接删除了原来的litepal文件(这个是没有后缀的),然后在assets目录下重新建了个文件:
在这里插入图片描述
弹窗中输入litepal.xml即可(一定要加xml后缀!!!这个是我改好之后,为了演示重新输入的,所以会有红字报错,大家正常输入是没问题的)
《第一行代码》纯小白踩坑记①——使用litepal时,程序崩溃_第4张图片

然后重新运行程序,发现问题解决,用书上说的adb shell查看,发现数据库和里面的一张Book表建立成功:
《第一行代码》纯小白踩坑记①——使用litepal时,程序崩溃_第5张图片

后记

虽然只是个很蠢的错误,但也讲了好多hhh,感觉实在有点啰嗦了。最后我在CSDN上找了一篇博客,总结了一些使用litepal的常见问题,链接贴上,希望对大家有所帮助。如果遇到了其他问题,其实直接CSDN查一下就行,很多博客都进行了总结。
[https://blog.csdn.net/liuyu0915/article/details/54692312]

你可能感兴趣的:(《第一行代码》纯小白踩坑记①——使用litepal时,程序崩溃)