前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >《Android Studio开发实战 从零基础到App上线》本书内容问题答疑

《Android Studio开发实战 从零基础到App上线》本书内容问题答疑

作者头像
aqi00
发布2019-01-18 15:16:43
1.1K0
发布2019-01-18 15:16:43
举报
文章被收录于专栏:老欧说安卓老欧说安卓

1、关于学习本书之前是否需要Java基础

问题:看安卓开发教程书需要很扎实的java基础吗? 回答:本书的零基础指的是安卓零基础,不是Java零基础,所以看本书之前需要一定的Java基础,基本的变量声明、控制语句、类和对象这三块是必需的;另外最好还掌握字符串模板、容器、接口这三块;如果能了解静态、异常、反射这三种概念对看懂代码很有帮助。 学会以上九项Java基础技术再看本书就会比较轻松了。其它的Java高级技术在本书里面用到的时候会另外介绍,比如: 文件IO,参见本书第4章的“4.3.2 文本文件读写”和“4.3.3 图片文件读写”; 任务,参见本书第6章的“6.2.1 任务Runnable”; 加密算法,参见本书第8章的“8.2.3 数据加密”; 线程,参见本书第10章的“10.1.1 消息传递Message”; HTTP调用,参见本书第10章的“10.2.3 HTTP接口调用”; 文件上传,参见本书第10章的“10.3.3 文件上传”; Socket,参见本书第10章的“10.4.2 Socket通信”; 线程池,参见本书第16章的“16.3 线程池管理”;

2、学习本书之前是否需要了解Java的高级特性与XML用法

问题:如果自己要进行布局,从布局文件text入手轻松还是直接画框框轻松?或者说对于一个新手该怎么正确地利用这本书,虽然我有java的基础但是我还是不太懂。像泛型、进程之类的我都不太懂。然后我需不需要把xml学一遍? 回答:自己布局通过xml布局文件会快些,因为AS支持预览xml布局的界面效果。 不需要太多关注java的高级特性,泛型只在“10.1.3 异步任务AsyncTask”有用到,多进程则很少用、本书也没介绍。 XML需要简单学一下,也不用学很深,简单就够用了。

3、关于本书附录源码的注释文字

问题:我在百度网盘下载了源码,代码里的注释很少,我零基础都看不懂怎么办? 回答:本书源码已经在补充全面注释了,补充注释了的部分章节已经上传到github,有需要的朋友可在github下载最新的全面注释源码。github的访问地址为:https://github.com/aqi00/android2 打开github页面后,单击网页右边的绿色按钮“Clone or download”,即可自动打包下载源码。

4、关于第2章的跑马灯文字滚动逻辑

问题:为什么跑马灯不是点一次停,再点一次动;而是点一次停,需要点两次才动? 回答:跑马灯滚动的时候,点击一下,此时onClick进入下面分支:

代码语言:javascript
复制
    tv_marquee.setFocusable(false);
    tv_marquee.setFocusableInTouchMode(false);

该分支取消文本视图的焦点,所以停止滚动了(只有在获得焦点的时候才能滚动)。 然后再点击一下,此时onClick进入下面分支:

代码语言:javascript
复制
    tv_marquee.setFocusable(true);
    tv_marquee.setFocusableInTouchMode(true);

注意该分支仅仅是允许文本视图获得焦点,此时文本视图相当于准备就绪,但尚未获得焦点。 然后点击第二下,因为上一步的点击使得文本视图允许获得焦点,于是第二下点击之后文本视图马上获得焦点,此时跑马灯开始滚动。 因此demo里面的跑马灯效果,实际运行结果就是点一下暂停,再点两下才继续滚动。如果想要只点一下就恢复滚动的话,可以在允许获得焦点之后调用requestFocus方法,示例代码如下:

代码语言:javascript
复制
    tv_marquee.setFocusable(true);
    tv_marquee.setFocusableInTouchMode(true);
    tv_marquee.requestFocus(); //强制获得焦点,让跑马灯滚起来

5、关于第2章的九宫格图片(点九图片)的查看与编辑

问题:为啥我这个SDK里面的tools目录下没有draw9patch.bat,这是怎么回事? 回答:最新的android studio已经集成了draw9patch.bat的功能,所以sdk就去掉了该文件。 在android studio中选中drawable目录下的图片,然后右击在右键菜单中选择下面的“Create 9-Patch files”,在弹出的对话框中点击“OK”按钮。接着drawable目录就会出现一个名为“***.9.png”的图片文件,双击该文件,就可以在右侧窗口中编辑点九图片了。

6、关于第4章和第5章的购物车商品图片在部分手机上无法显示的问题

问题:为什么第四章的购物车显示不了商品图片? 回答:这是Android7.0默认不分配sd卡存储权限导致的。即使你在设置中开启存储权限,重启app也看不到购物车商品图片,这是因为代码有判断SharedPreferences保存的first数值,如果不是首次运行则不进行图片加载操作。 该问题的解决办法是修改storage模块中ShoppingCartActivity.java的downloadGoods方法,把下面这行代码:

代码语言:javascript
复制
    String path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS) + "/";

改为下面这段代码:

代码语言:javascript
复制
    String path = "";
    //Android7.0之后默认关闭App的SD卡权限,所以对于7.0以上系统把存储路径改为App安装路径的data目录下
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) {
        path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS) + "/";
    } else {
        path = MainApplication.getInstance().getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS).toString() + "/";
    }

然后在手机上卸载并重装storage。

7、关于本书源码对Android7.0的兼容情况说明

问题:用Android7.0导入demo会不会有新的问题呀? 回答:Android7.0目前发现主要有三个地方影响到本书源码,介绍如下: 1)部分手机上无法正常显示购物车图片,这是Android7.0默认不分配sd卡存储权限导致的。解决办法参见上一点的说明“关于第4章和第5章的购物车商品图片在部分手机上无法显示的问题”。 2)Android7.0能拍照但不能保存,这是因为Android7.0默认禁止访问sd卡导致的。代码的修改办法同上一小点。 3)部分手机使用DownloadManager下载图片会闪退。这是因为Android7.0之后增强了文件访问权限,DownloadManager.COLUMN_LOCAL_FILENAME被废弃,如果在7.0及以上手机访问该字段会触发异常java.lang.SecurityException。解决办法:是改成使用Uri方式访问文件,即把COLUMN_LOCAL_FILENAME改为COLUMN_LOCAL_URI,具体到代码里则是将下面这行代码

代码语言:javascript
复制
    int nameIdx = cursor.getColumnIndex(DownloadManager.COLUMN_LOCAL_FILENAME);

改为下面这行代码:

代码语言:javascript
复制
    int nameIdx = cursor.getColumnIndex(DownloadManager.COLUMN_LOCAL_URI);

注意network模块的DownloadImageActivity.java和ChatMainActivity.java里的相关代码都要修改。 4)Android7.0以上手机无法正常进行AES加解密,原因是Android7.0开始去掉了Crypto provider,需要开发者自己定义一个如下的CryptoProvider类:

代码语言:javascript
复制
    public static final class CryptoProvider extends Provider {
        public CryptoProvider() {
            super("Crypto", 1.0, "HARMONY (SHA1 digest; SecureRandom; SHA1withDSA signature)");
            put("SecureRandom.SHA1PRNG",
                    "org.apache.harmony.security.provider.crypto.SHA1PRNG_SecureRandomImpl");
            put("SecureRandom.SHA1PRNG ImplementedIn", "Software");
        }
    }

然后AES加解密获取随机种子的代码修改为下面这样:

代码语言:javascript
复制
        SecureRandom sr;
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
            sr = SecureRandom.getInstance("SHA1PRNG", new CryptoProvider());
        } else {
            sr = SecureRandom.getInstance("SHA1PRNG", "Crypto");
        }

5)Android7.0以上的TextureView无法在布局文件中使用background属性,否则会报错“TextureView doesn't support displaying a background drawable”。 原因是7.0之后TextureView的setBackgroundDrawable方法已经废弃,,所以7.0之后不能直接设置TextureView的背景了。

8、关于第8章导出APK安装包的V1和V2选项

问题:把app工程导出为apk文件,最后一个窗口出现了V1和V2两个选项,我看书上没有这两个选项,它们有什么区别?如果只勾选V1的话,能上架到商店吗?

回答:打包时出现选项V1和V2,这是Android Studio2.3之后新增的功能,本书基于Android Studio2.2,当时还没有V1和V2。

其中V1是必须勾选的,否则打出来的apk文件无法正常安装。V2建议也勾选,该选项可避免Janus漏洞。 如果想成功上架,就要同时勾选V1和V2。因为现在很多应用商店为了规避Janus漏洞,都要求开发者必须勾选V2选项。

9、关于第10章的socket服务端代码的启动方式

问题:Socket服务器端我将TestServer运行到Tomcat上面,这个没运行成功还需要什么配置吗? 回答:TestServer.java不是以web方式启动的,要按下面步骤启动:右击TestServer.java,依次选择右键菜单“Run As”——“Java Application”。 另外注意仿QQ聊天的Socket服务程序ChatServer.java,也要按照上述步骤启动。

10、关于第10章仿QQ聊天的服务端代码的处理逻辑

问题:network_server的压缩包里面有好几个网络通信服务端的源码,可以简单的把这几个文件的配合情况,说一遍吗?虽然有这些文件,但是不知道怎样配合,形成手机端、服务器,并且相互通讯。 回答:服务端的Socket工程有四个代码:ChatServer.java、DateUtil.java、ServerThread.java、SocketBean.java DateUtil.java是个日期工具类,SocketBean.java是个消息实体类,这两个很简单。 主要是ChatServer.java和ServerThread.java,其中ChatServer.java是主程序入口,入口是main函数,ServerThread.java是服务端的线程管理。 ChatServer启动后,会持续侦听端口52000,一旦有客户端连接进来,则启动一个ServerThread线程为该客户端服务,另外给它分配一个socket并加入队列。如果有两部手机连接进来,就启动两个服务端线程,socket队列大小为2。 ServerThread.java启动后运行run函数,从客户端接收消息,收到回车符就认为本次消息接收完毕,然后开始解析该消息的内容,包括包头和包体。从包头中判断消息类型与设备编号,从包体中读取具体的数据,处理完成后返回。如果客户端的动作是SENDMSG,则还要根据otherId到socket队列中寻找指定设备编号对应的socket,然后把消息内容推给该socket指向的客户端。

11、关于第15章百度地图如何进入LBS服务页面

问题:百度开发者平台上按照书上步骤,为啥没有LSB服务啊?

回答:百度开发者平台改版了,原有方式进不了地图服务。 需要直接访问百度地图开放平台http://lbsyun.baidu.com/,然后单击页面右上角的“API控制台”链接,或者直接访问网址http://lbsyun.baidu.com/apiconsole/key 在打开的应用列表页面创建地图应用。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018年01月16日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、关于学习本书之前是否需要Java基础
  • 2、学习本书之前是否需要了解Java的高级特性与XML用法
  • 3、关于本书附录源码的注释文字
  • 4、关于第2章的跑马灯文字滚动逻辑
  • 5、关于第2章的九宫格图片(点九图片)的查看与编辑
  • 6、关于第4章和第5章的购物车商品图片在部分手机上无法显示的问题
  • 7、关于本书源码对Android7.0的兼容情况说明
  • 8、关于第8章导出APK安装包的V1和V2选项
  • 9、关于第10章的socket服务端代码的启动方式
  • 10、关于第10章仿QQ聊天的服务端代码的处理逻辑
  • 11、关于第15章百度地图如何进入LBS服务页面
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档