700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 安卓开发使用Bmob遇到的一些问题及解决办法

安卓开发使用Bmob遇到的一些问题及解决办法

时间:2023-01-04 06:55:32

相关推荐

安卓开发使用Bmob遇到的一些问题及解决办法

安卓开发使用Bmob遇到的一些问题及解决办法

最近在做安卓的大作业,在数据库方面遇到了很多困难,最后决定使用Bmob云数据库作为后端。在按照官方文档将Bmob SDK配置到Android Studio和初始化Bmob时,出现了很多问题,下面记录了我在使用Bmob时的问题和一些解决方案(Android Studio版本为3.6,项目使用的Android10.0)

初始化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_8targetCompatibility 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" />

配置ContentProvider

// A code block<application<providerandroid:name="cn.bmob.v3.util.BmobContentProvider"android:authorities="应用包名.BmobContentProvider"></provider></application>

到这一步BmobSDK就导入成功了,在application的oncreate方法里加入初始化语句 Bmob.initialize(this, “Your Application ID”);这个时候初始化就成功啦!

按照官方文档本地导入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.网络请求问题

终于没有闪退时,我做了注册登录功能,结果发现在注册完成后接着点击登录,并不能查询到用户信息,必须得重启一下才能登录成功。登录失败获取到的返回报错信息为.UnknownServiceException: CLEARTEXT communication to not permitted by network security policy

这是由于http请求阻塞不能联网导致的。安卓9强制使用https,这个时候一种解决办法就是让它兼容。在AndroidManifest文件的application里加入android:usesCleartextTraffic=“true”。加入后,多次测试,都没有再出现这个问题。

在大作业中遇到的其他问题将以后再整理。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。