最近在做安卓的大作业,在数据库方面遇到了很多困难,最后决定使用Bmob云数据库作为后端。在按照官方文档将Bmob SDK配置到Android Studio和初始化Bmob时,出现了很多问题,下面记录了我在使用Bmob时的问题和一些解决方案(Android Studio版本为3.6,项目使用的Android10.0) 接下来就是配置文件了。 配置ContentProvider 到这一步BmobSDK就导入成功了,在application的oncreate方法里加入初始化语句 Bmob.initialize(this, “Your Application ID”);这个时候初始化就成功啦!
安卓开发使用Bmob遇到的一些问题及解决办法
一开始,我是按照文档里的快速入门配置的BmobSDK,用的是官方推荐的通过添加依赖自动导入的方法。配置完成后,在项目中加入初始化语句,结果每次打开都会闪退。查了很多办法,没有解决问题,也没有找到到底什么原因。后来尝试手动导入,导入成功后,再使用初始化语句就不会闪退了。
手动导入方法:在BmobSDK下载中心下载数据服务 的Android 版本的SDK。下载后,将本地导入SDK文件夹下的libs文件夹里的东西复制到项目工程里的libs目录下。
图上标记的androidx-core-1.0.0在导入后报错,报错信息全是关于androidx-core-1.0.0的,应该是跟已有的版本冲突了,所以不用导入这个。okio-2.1.0导入后未报错,但是在有bmob数据操作的activity会闪退,所以不能本地添加这个okio-2.1.0 jar包。详细信息将在后面给出。
导入成功以后,添加依赖
在app的build.gradle文件中添加依赖文件// 设置JDK1.8,支持Lambda表达式 android{ compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } //添加依赖 sourceSets {main.jniLibs.srcDirs = ['libs'] } useLibrary 'org.apache.http.legacy' } dependencies { implementation "org.reactivestreams:reactive-streams:1.0.2" implementation fileTree(dir: 'libs', include: ['*.aar', '*.jar'], exclude: []) //导入okio包 implementation 'com.squareup.okhttp3:okhttp:3.14.1' implementation 'com.squareup.okio:okio:2.2.2' }
配置AndroidManifest.xml
添加相应的权限<uses-permission android:name="android.permission.INTERNET" /> <!-- 获取GSM(2g)、WCDMA(联通3g)等网络状态的信息 --> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <!-- 获取wifi网络状态的信息 --> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <!-- 保持CPU 运转,屏幕和键盘灯有可能是关闭的,用于文件上传和下载 --> <uses-permission android:name="android.permission.WAKE_LOCK" /> <!-- 获取sd卡写的权限,用于文件上传和下载 --> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <!-- 允许读取手机状态 用于创建BmobInstallation --> <uses-permission android:name="android.permission.READ_PHONE_STATE" />
// A code block <application <provider android:name="cn.bmob.v3.util.BmobContentProvider" android:authorities="应用包名.BmobContentProvider"> </provider> </application>
按照官方文档本地导入SDK后,在执行插入数据时,仍出现了闪退的情况,所以上面给出的配置文件或依赖有官方文档没写的东西。按照以上的步骤配置,应该不会出现我当初的问题。
2.save方法导致的闪退。
当初按照文档给的仅添加配置 sourceSets {
main.jniLibs.srcDirs = [‘libs’]}
调用bmob里的save方法会闪退,调试时主要报错有
LambdaObserver.onError
解决办法:设置JDK1.8,在上面配置文件以给出
Lorg/reactivestreams/Publisher
解决办法:缺少reactive-streams.jar包,
implementation “org.reactivestreams:reactive-streams:1.0.2”
上面添加依赖时已给出
Failed resolution of: Lokhttp3/MediaType
解决办法:okio这个包要通过implementation导入,不能本地导入
我给出的本地导入的步骤,里面都直接配置好了这些,可以避免踩雷。
3.网络请求问题
终于没有闪退时,我做了注册登录功能,结果发现在注册完成后接着点击登录,并不能查询到用户信息,必须得重启一下才能登录成功。登录失败获取到的返回报错信息为java.net.UnknownServiceException: CLEARTEXT communication to open2.bmob.cn not permitted by network security policy。
这是由于http请求阻塞不能联网导致的。安卓9强制使用https,这个时候一种解决办法就是让它兼容。在AndroidManifest文件的application里加入android:usesCleartextTraffic=“true”。加入后,多次测试,都没有再出现这个问题。
在大作业中遇到的其他问题将以后再整理。
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算