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进入下面分支:

    tv_marquee.setFocusable(false);tv_marquee.setFocusableInTouchMode(false);

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

    tv_marquee.setFocusable(true);tv_marquee.setFocusableInTouchMode(true);

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

    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方法,把下面这行代码:

    String path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS) + "/";

改为下面这段代码:

    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,具体到代码里则是将下面这行代码

    int nameIdx = cursor.getColumnIndex(DownloadManager.COLUMN_LOCAL_FILENAME);

改为下面这行代码:

    int nameIdx = cursor.getColumnIndex(DownloadManager.COLUMN_LOCAL_URI);

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

    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加解密获取随机种子的代码修改为下面这样:

        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
在打开的应用列表页面创建地图应用。

其它疑问参见:
  本书的相关资源下载和勘误记录参见博文 《Android Studio开发实战 从零基础到App上线》资源下载和内容勘误。
  本书的源码导入和运行问题解答参见博文 《Android Studio开发实战 从零基础到App上线》源码运行问题解答。

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

  1. 《Android Studio开发实战 从零基础到App上线(第2版)》出版后记

    2015年11月23日,鄙人在csdn发表了第一篇技术文章,掐指一算距今已有三年.遥想当年开写博客,只是为了总结经验同时分享出来,后来机缘巧合受到出版社编辑邀请并出了书,完全是无心插柳的结果.当初写作 ...

  2. 《Android Studio开发实战 从零基础到App上线》源码运行问题解答

    本书提供了所有章节的完整源码下载,自上市以来陆续收到读者的意见反馈,现将与源码有关的问题汇总归类如下,方便更多的朋友解决源码运行过程中发现的问题: 一.打开本书源码时,出现"Plugin w ...

  3. 《Android Studio开发实战 从零基础到App上线》第一版的资源下载和内容勘误

    资源下载 下面是<Android Studio开发实战 从零基础到App上线>(第一版)一书用到的工具和代码资源: 1.本书使用的Android Studio版本为2.2.3,因为Andr ...

  4. 《Android Studio 开发实战从零基础到App上线》笔记1

    <Android Studio 开发实战从零基础到App上线>笔记1 前言 在吉林大学Android studio实践的课程上,因为时间有限,教授教授地很不细致,主要讲了初级控件和中级控件 ...

  5. 《Android Studio开发实战 从零基础到App上线(第2版)》资源下载和内容勘误

    资源下载 下面是<Android Studio开发实战 从零基础到App上线(第2版)>一书用到的工具和代码资源: 1.本书使用的Android Studio版本为3.2,最新的安装包可前 ...

  6. 《Android Studio开发实战 从零基础到App上线(第3版)》资源下载和内容勘误

    资源下载 下面是<Android Studio开发实战 从零基础到App上线(第3版)>一书用到的工具和代码资源: 1.本书使用的Android Studio版本为Android Stud ...

  7. 《Android Studio开发实战 从零基础到App上线(第3版)》出版后记

    2018年11月,经过熬夜写作的<Android Studio开发实战 从零基础到App上线(第2版)>正式出版面世.承蒙众多读者的厚爱,第2版的图书在此后的三年多时间,一直保持在移动开发 ...

  8. 《Android Studio开发实战 从零基础到App上线(第2版)》常见问题解答

    下面是第二版读者较经常提出的问题,现统一整理回复如下: 1.第1章的SVN仓库地址 问题:第17页"1.5.2 安装SVN工具"这节里面提到的SVN仓库地址要填什么? 回答:SVN ...

  9. 新书推荐:《Android Studio开发实战:从零基础到App上线》

    让我们来看看<Android Studio开发实战 从零基础到App上线>的封面,这个设计简洁大气,很有内涵. <Android Studio开发实战 从零基础到App上线>一 ...

最新文章

  1. Git 常用命令清单
  2. leetcode32 Longest Valid Parentheses
  3. Intellij IDEA 14中使用MyBatis-generator 自动生成MyBatis代码
  4. .Net多线程文章收集
  5. java消息分发_Kafka教程设计思想之消息分发策略
  6. 友元函数 友元类 友元成员函数
  7. Web框架——Flask系列之蓝图Blueprint(二十一)
  8. nginx正向代理https,zabbix内网实现企业微信告警
  9. 如果数据库也有一个元宇宙,应该会是什么样子?
  10. 小米虚高的估值泡沫要破了么?
  11. 蚂蚁金服 SOFAArk 0.6.0 新特性介绍 | 模块化开发容器...
  12. 距离公式汇总以及Python实现
  13. 天津市高分二号卫星影像获取/高分一号卫星影像
  14. kdays 游戏汉化教程[日记版本] 序章 接触
  15. Java中Json解析
  16. win10 远程桌面和向日葵远控哪个好用?
  17. Unity场景素材导出为 FBX文件的方法
  18. 推荐几款高性价比电机驱动芯片
  19. 网 络 世 界 的 黑 暗 面
  20. python求绝对值_python中取绝对值简单方法总结

热门文章

  1. GAT: 图注意力模型介绍及PyTorch代码分析
  2. mysql数据库物理结构设计_通俗数据库设计(4)物理结构设计
  3. 正版office2016 简易安装版
  4. linux 文件在哪个硬盘,中国大学MOOC: 在Linux文件系统中,文件名也存放在磁盘上,存放于磁盘的下述哪个区域 答案:文件存储区...
  5. insert into 优化测试
  6. 中午吃什么?html(拯救选择困难症)
  7. 油田钻头行业调研报告 - 市场现状分析与发展前景预测
  8. 栈与堆、浅拷贝与深拷贝以及什么是闭包
  9. 字体设计合集欣赏|为你的下一个设计项目找到完美的字体
  10. 深入理解YYCache