android 第一次log

  早上代码出了点问题,排查了一个下午,大概知道了问题出在哪几行代码,但是左看右看找不到原因,单位前辈帮忙,第一次经历了log排查错误原因,感受到了代码的排错的魅力。

  不能进行断点,所以只能一步步来log打印。谢谢前辈。

首先我发现注释掉下面几行代码就没有问题了,

val sceneDataList: ArrayList<SceneData> = ArrayList()
val sceneData = SceneData()

  sceneData.sceneName = it.sceneName
  sceneData.desc = it.sceneDesc
  sceneData.sid = it.id
  sceneDataList.add(sceneData)

if(sceneDataList.isNotEmpty()) {
  mSmartSceneDatabase?.scenesDao()?.deleteAll()
  mSmartSceneDatabase?.scenesDao()?.insert(sceneDataList)
}

我看了sceneData中的结构,从数据库中获取一个表,然后读取值,

@Entity(tableName = "scenes", indices = [Index(value = ["sid"], unique = true)])

看起来并没有什么问题,我只是新建一个list然后在其中插入sceneData的数据,如果sceneDataList不为空,更新

mSmartSceneDatabase?.scenesDao()

scenesDao是别人定义好的,里面的东西用过不少次,别的地方都没有出问题,我感觉这里理应也不会有什么不一样的,然后我就很懵逼了,这啥玩意。

大佬来了,开始log教学。

LogUtil.e(TAG, "sceneBeanList =  $sceneBeanList")

第一个log查看这个类最后返回的数据,显然是有数据的,所以服务器传过来的数据没有问题,

然后查看senesDao中的数据,也没有问题,里面的东西我连改都没改过。

然后大佬查看这个数据的应用的activity,

CategoryActionModel中用的,
getList(categoryId, pageNo, pageSize)

调了三个参数,这三个参数好像也和我写的没什么关系,因为用的是mvp模式,所以找到了这个model所用的加载,

CategoryScenePresenter

数据在其中请求,

// 检测是否绑定 View
        checkViewAttached()
        mRootView?.showLoading()
        val disposable = mModel.getSceneList(categoryId, pageNo, pageSize)
            .subscribe({ list ->
                mRootView?.apply {
                    dismissLoading()
                    setCategorySceneData(list)
                }

            }, { t ->
                LogUtil.e(TAG, "requestSceneData ...")
                mRootView?.apply {
                    dismissLoading()
                    showError(ExceptionHandle.handleException(t), ExceptionHandle.errorCode)
                }

            })

由于报错的加载不出来的数据有错误显示,所以判断可能在这出的问题,log一下,发现确实在这里被判断出错异常,进入下面的判断逻辑,导致出错。

于是进入其fragment中看看,

mPresenter.loadMoreData(mCategoryId, mPageNo, mPageSize)

通过懒加载的方式,选择categoryId来的,将cateid写死,看了一下是不是其他页面对这个页面造成了影响,因为sceneData是几个页面异步公用的。发现只单独加载出问题的那一个页面还是出问题,排除了其他页面的影响。

showError(ExceptionHandle.handleException(t), ExceptionHandle.errorCode)

在showError里查看,得到问题所在

errorMsg = "参数错误"

参数错误的问题原因。但还是不知道问题出在哪里,查看sceneData中的数据,大佬怀疑是string类型的数据是不是可能直接定义为null造成空指针之类的问题,先改了吧,发现不是。

int类型我给赋值了个null,

var ruleType: Int? = 0,

改回来赋值为0,还是不对,错误依旧。

对照

scenesBean和sceneData中的数据的类型,发现完全一致,没有问题。

最后:

@PrimaryKey(autoGenerate = true)
var id: Int = 0,

大佬发现定义为主键自增的id被我误以为是categoryid之类的页面id

  sceneData.sid = it.id
给直接赋值了。

完全没在意这点好吧,被训了一顿好好看看数据库。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值