IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Android 天气APP(三十五)修复BUG、升级网络请求框架 -> 正文阅读

[移动开发]Android 天气APP(三十五)修复BUG、升级网络请求框架

前言

??之前在GoodWeather2.6的时候陆陆续续出现了一些小bug,只不过是一句话就能改好,所以就没有单独写一篇文章来说明,不过当问题积累的多了之后,就有这个必要了。当然这些问题很多并不是我发现的,而是细心的读者发现的。那就不说废话了,进入正题。

正文

??这些问题的出现一般来说是我当时写代码没有注意到的细节,如果你是复制粘贴我的代码可能也会出现同样的问题。

一、显示bug

??这个问题由一个读者发现后反馈给我,在之前的代码中,MainActivity中的空气质量显示,我两个TextView显示了一个值,被指出,然后我就马上改了,文章也做了更新。
在这里插入图片描述
这个图就是github上的修改记录,红色的代表去掉的代码,绿色代表增加或修改的代码。

在这里插入图片描述
然后是方法名的修改,在更多生活质量页面,所写的方法名不符合当前所在页面,容易造成误导,因此修正。
这个bug是在2021年4月1号的时候改的。

还有一个显示bug,是在查询城市失败的时候没有关闭加载弹窗,导致无法操作页面。修改代码如下:
在这里插入图片描述

二、数据访问bug

??在之前的网络请求中,每一次请求都会执行两次,这个问题由一个读者发现,和我反应出来,我更换了网络框架,其实就是在原来的基础上增加了RxJava的使用,新的网络框架在源码中的mvplibrary模块的newnet包下。
在这里插入图片描述

这个框架其实我单独写过一篇文章来介绍,文章地址如下:
Android OkHttp+Retrofit+RxJava搭建网络访问框架(含源码)

想要详细了解里面过程的可以看看,不打算了解的,直接复制代码到使用的地方就可以了,针对于这个框架来说,改变的地方相对于原来的框架有一些区别,但总体区别不大,就拿主页面的请求来说明一下:

在新的框架中是由NetworkApi去构建网络请求的,在之前是通过ServiceGenerator,这里就要做修改。

新框架需要在Application中进行一个初始化,这和之前有所不同,在app模块下新建一个NetworkRequiredInfo类,实现INetworkRequiredInfo,代码如下:

/**
 * 网络访问信息
 * @author llw
 */
public class NetworkRequiredInfo implements INetworkRequiredInfo {

    private Application application;

    public NetworkRequiredInfo(Application application){
        this.application = application;
    }

    /**
     * 版本名
     */
    @Override
    public String getAppVersionName() {
        return BuildConfig.VERSION_NAME;
    }
    /**
     * 版本号
     */
    @Override
    public String getAppVersionCode() {
        return String.valueOf(BuildConfig.VERSION_CODE);
    }

    /**
     * 是否为debug
     */
    @Override
    public boolean isDebug() {
        return BuildConfig.DEBUG;
    }

    /**
     * 应用全局上下文
     */
    @Override
    public Application getApplicationContext() {
        return application;
    }
}

然后在WeatherApplication中完成初始化。
在这里插入图片描述
还是一个地方就是ApiService的修改,之前用的是Retrofit2的Call来进行回调,现在是使用RxJava的Observable来进行。

在这里插入图片描述
因此每一个接口都需要更改。下面就用一个最简单的页面来说明:欢迎页面。

SplashContract,首先是这个页面的订阅器。
在这里插入图片描述
这是一个获取App版本号的请求,修改的内容如上图所示。
回调接口如下图:
在这里插入图片描述
页面中使用。
在这里插入图片描述
那么相对于这一个接口,其他的接口修改方式一样,如果还不清楚可以查看我的源码。在我修改网络框架之前,我特意保存了一个之前的未修改网络框架的源码。之前的源码地址如下:GoodWeather

这个下载是0积分,可以直接下载,你现在从GitHub上看到的代码是修改了网络框架之后的。

好了,对于网络框架的的修改就说到这里。

三、程序崩溃

??程序崩溃对于App来说就是大问题了,因此要在开发时做反复的测试,这一点我有所疏忽。这个问题是我在调试的时候发现的,崩溃的起因源自于App中讯飞语音的使用,这和讯飞没啥关系,完全是我使用的问题。

问题出现的原因就是讯飞语音识别是弹窗的调用,context重复使用,导致当第一个页面调用了语音识别之后,第二个页面调用时引用的context还是之前的,但是之前的页面销毁了,则弹窗找不到显示的页面,页面崩溃报错。解决方法是,每次调用弹窗时传入当前页面的context,这样就可以避免了。
在这里插入图片描述
然后是调用的地方。有三处,如下图所示,一一修改即可。
在这里插入图片描述

四、小米8上的崩溃

??此问题由一个读者发现,问题出现原因是在小米8手机上,运行到主页面时会崩溃,但是在我自己的手机和测试机上都不会崩溃,这个就很奇怪了。
这是当时的报错信息:
java.lang.RuntimeException: Canvas: trying to draw too large(125452800bytes) bitmap.

现在可以得出是页面绘制的问题,因此这里就要解决,其实最简单的办法就是修改资源文件目录,之前我的大图片都放在drawable下的,这其实有问题。只不过之前没有报错就没有注意到,这一次增加一个drawable-nodpi文件夹,这样当屏幕绘制就按照大的分辨率去进行,避免程序崩溃。

在这里插入图片描述
源码地址:https://github.com/lilongweidev/GoodWeather
(由于CSDN技术问题,我暂时用不了超链接了)
欢迎 StarFork

山高水长,后会有期~

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章           查看所有文章
加:2021-08-03 17:23:32  更:2021-08-03 17:23:53 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/6 2:02:54-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码