下面是第二版读者较经常提出的问题,现统一整理回复如下:

1、第1章的SVN仓库地址

问题:第17页“1.5.2 安装SVN工具”这节里面提到的SVN仓库地址要填什么?
回答:SVN仓库地址指的是SVN服务器地址,如果你们单位有专人负责svn代码管理,可向他(svn管理员)咨询这个svn地址。如果你的代码只在自己电脑运行,不需要提交给服务器备份,那么建议略过svn这部分。

2、第2章的跑马灯文字滚不起来

问题:第34页“2.3.1 文本视图TextView”中的“1. 跑马灯效果”,按照示例XML编写了布局文件,结果跑马灯文字还是跑不起来,点击也不管用。
回答:该例子除了xml格式的布局文件,还需java代码配合才行,搭配用的java文件参见本书附录源码junior模块里的MarqueeActivity.java,完整的文件路径见下:
        junior\src\main\java\com\example\junior\MarqueeActivity.java
另外,如果发现TextView被点击后,跑马灯不会自动暂停的话,需要开发者给TextView注册一个点击监听器,然后重写点击监听器的onClick方法,在该方法中编写暂停跑马灯的处理代码。具体代码参见刚才说的MarqueeActivity.java。

3、第10章根据经纬度获取不到地址

问题:第430页“10.2.3 HTTP接口调用”中的实战小项目,根据经纬度调用Google Map获取不到地址信息。
回答:谷歌地图从2019年开始必须传入密钥才能根据经纬度获取地址,所以现在无法正常调用Google Map的地址查询接口了。解决办法是把查询接口改成国内的天地图,涉及到network模块的GetAddressTask.java,有三处地方要改:
第一处修改mAddressUrl,代码示例如下:

        private String mAddressUrl = "https://api.tianditu.gov.cn/geocoder?postStr={'lon':%f,'lat':%f,'ver':1}&type=geocode&tk=145897399844a50e3de2309513c8df4b";

第二处doInBackground方法里面拼接url的代码改成下面这样:

        String url = String.format(mAddressUrl, location.getLongitude(), location.getLatitude());

第三处从json串解析地址信息的代码修改如下:

                JSONObject obj = new JSONObject(resp_data.content);JSONObject result = obj.getJSONObject("result");address = result.getString("formatted_address");

已经改好的GetAddressTask.java代码例子见如下页面:
        https://github.com/aqi00/android2/blob/master/network/src/main/java/com/example/network/task/GetAddressTask.java

4、第10章的仿QQ聊天,客户端与服务端无法通信

回答:网络部分的附录代码分成两块,客户端代码在network模块,服务端代码包括NetServer工程和SocketServer工程,其中NetServer工程承担HTTP服务器的角色,SocketServer承担Socket服务器的角色,这两种服务器都要在电脑上启动。客户端与服务端无法通信的原因可能有以下几点:
1、network模块中ClientThread.java里面的SOCKET_IP没有改成Socket服务器的ip,如果SocketServer工程在笔记本电脑上启动的话,SOCKET_IP就填笔记本电脑的无线ip
2、network模块中ClientThread.java里面REQUEST_URL没有改成HTTP服务器的ip,如果NetServer工程在笔记本电脑上启动的话,REQUEST_URL里的ip就填笔记本电脑的无线ip
3、network模块中QueryFriendTask.java里面mQueryUrl的"/queryFriend"被改成大写的"/QueryFriend"了,注意这里的q是小写的。
特别注意,在cmd窗口下,使用命令“ipconfig /all”要找的是笔记本电脑的无线ip,不是找网线的有线ip。如果在笔记本电脑上启动模拟器充当客户端,代码里的服务器ip也必须填笔记本电脑的无线ip,不能填127.0.0.1

5、第10章的HTTP接口调用,出现错误“No Network Security Config specified”

回答:Android9开始默认使用加密连接,也就是只能访问https打头的网络地址,不能访问http打头的网络地址(如果访问http地址就会报错“No Network Security Config specified”)。此时要在network模块的res目录下面创建xml目录,并在xml目录下新建文件network_security_config.xml,文件内容如下所示:

<?xml version="1.0" encoding="utf-8"?>
<network-security-config><base-config cleartextTrafficPermitted="true" />
</network-security-config>

然后打开network模块的AndroidManifest.xml,在该文件的application节点下增加android:networkSecurityConfig属性,也就是下面这样:

    <applicationandroid:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:theme="@style/AppTheme"android:networkSecurityConfig="@xml/network_security_config"android:name=".MainApplication">

配置完毕重新运行network模块,就能访问http打头的地址了。
其它无法访问网络图片、无法打开网页、无法下载APK等问题,均可照此办理。或者直接把http换成https也行。

6、使用Tomcat8.5无法运行第10章的服务端工程NetServer

回答:针对tomcat8.5需要对NetServer工程做以下修改:
1、打开NetServer\.settings\org.eclipse.wst.common.project.facet.core.xml,把里面的“Apache Tomcat v8.0”改为“Apache Tomcat v8.5”
2、在eclipse中右击NetServer,依次选择菜单“Build Path”——“Configure Build Path”,窗口右边切到Library页,选中带红叉的“Apache Tomcat v8.0”,再单击右边的Remove按钮移除8.0;然后单击右边的Add Library按钮,在弹窗中选择“Server Runtime”,单击Next按钮,在下一页选中Apache Tomcat v8.5,然后单击Finish按钮。
3、在eclipse中右击NetServer,依次选择菜单“Build Path”——“Configure Build Path”,窗口右边切到Library页,选中带红叉的“JRE System Library***”,再单击右边的Remove按钮移除该jdk;然后单击右边的Add Library按钮,在弹窗中选择“JRE System Library”,单击Next按钮,在下一页选中本地的jdk,然后单击Finish按钮。
4、打开NetServer\WebRoot\upload.jsp,把“http://192.168.0.212:8080/UploadTest/uploadServlet”改为“http://localhost:8080/NetServer/uploadServlet”(注意端口号要填正确)
5、打开NetServer\src\servlet\UploadServlet.java,把下面这行
    String filePath = String.format("%s../../%s", rootPath, fileName);
改为下面这样:
    String filePath = String.format("D:/%s", fileName);
最后重新启动elipse,再运行NetServer

7、第10章的Socket通信源码在发送消息时报错“System.err: android.os.NetworkOnMainThreadException”

回答:需要把MessageTransmit.java里的下面这行代码
    mWriter.write(send_msg.getBytes("utf8"));
改成以下代码:

    // 即使在Handler中访问网络,也要开启分线程来操作new Thread(new Runnable() {@Overridepublic void run() {try {// 往输出流对象中写入数据mWriter.write(send_msg.getBytes("utf8"));} catch (Exception e) {e.printStackTrace();}}}).start();

或者把mSendHandler的赋值语句放到MessageTransmit类的run方法之中,确保mSendHandler的代码在分线程中运行。

更多问题可加入QQ群进行咨询,群号是493199768

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    1.关于学习本书之前是否需要Java基础 问题:看安卓开发教程书需要很扎实的java基础吗? 回答:本书的零基础指的是安卓零基础,不是Java零基础,所以看本书之前需要一定的Java基础,基本的变量声 ...

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

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

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

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

最新文章

  1. mysql 提交_MySQL 事务提交过程
  2. dev 点击子控件触发panelcontrol事件_LINUX IIO子系统分析之二 IIO子系统数据结构分析...
  3. 一个关于用户体验的思考
  4. c-nominated = ((rcheck-use_candidate) || c-nominated);
  5. linux启用root用户,Ubuntu 下启用root账号与修改密码
  6. c语言游戏编程网盘下载,C语言游戏编程 计算器(5分下载)
  7. luogu P3391 【模板】文艺平衡树(Splay)
  8. ubuntu安装/查看已安装包的方法
  9. Asp.net MVC模型数据验证扩展ValidationAttribute
  10. 面试必备:HashMap底层数据结构?jdk1.8算法优化,hash冲突,扩容等问题
  11. CentOS7下Hive的安装配置
  12. java序列化错在哪里_Spark序列化错误:java.io.NotSerializableException
  13. ThreadLocal实现线程范围内的共享变量
  14. php内核探索 [转]
  15. Error: if there's nested data, rowKey is required.
  16. Jakarta Commons:巧用类和组件三(转)
  17. python实现给定信号生成任意信噪比的带噪声信号
  18. python爬虫html、parser_利用python HTMLParser标准库实现一个简单的爬虫
  19. Bootstrap基础三 排版
  20. 学习分布式存储应该从哪几方面着手?

热门文章

  1. 面试准备每日五题:C++(十)——mapset、set查找、迭代器实现、set低层原理
  2. sklearn一般流程
  3. Jenkins学习三:介绍一些Jenkins的常用功能
  4. 用Kubeadm安装K8s后,kube-flannel-ds一直CrashLoopBackOff
  5. call and apply
  6. 游戏王血计算机,【统计】历代主角控血一览
  7. java war包更新 部署_关于Linux系统下基于Tomcat部署和升级war包的详细过程
  8. Vaadin介绍与开发练习之二(创建第一个Vaadin类)
  9. MySQL 得到数据库的大小
  10. linux脚本expect分区,linux – 从不同位置执行Expect脚本