211004.《Learning Android中文版》学习笔记
《Learning Android中文版》学习笔记06.5.02~06.5.04
6.5.2. 保存文件:同时构建项目
对文件做过更改,不管是Java文件还是XML文件,都得记着保存它们。在点击File->Save或按下Ctrl-S时,Eclipse都会自动重新构建项目。因此在保存一个文件并确保无误之前,最好不要修改其它文件,以免引入别的错误。若项目构建失败,代码中会出现红色的x标志,可以凭此判断这个文件中是否有错误存在。Java与XML相互依赖,修改起来若不顾顺序,同时修改又同时保存,一次正确还好,出现错误的话只会让错误更加难以寻找。
有代码中红色的x标志在,Java中的错误一般还比较容找到(如 图6.4 "跟踪Java的错误")。只要将鼠标移向那个错误标志,Eclipse即可告诉你错误的类型、位置,以及可能的修复方法。Eclipse的这一功能堪比文字处理工具中的拼写检查,十分有用。
图 6.4. 跟踪Java的错误
image.png跟踪Java的错误
6.5.3. 添加库jtwitter.jar
我们的程序需要连接到服务端来访问兼容Twitter的API,自然也就免不了一系列的网络服务(Web Service)调用。Android拥有Java标准的网络编程接口,因此在Java中可用的许多网络服务都可以直接拿来,而没有重复发明轮子的必要。
为更方便地使用网络服务和Twitter API,我们选用了Winterwell Associaties的三方库jtwitter.jar。它提供了一个简单的类,使得与Twitter服务端之间的交互变得十分方便。不过,如果没有jtwitter这样的三方库怎么办?我们大可使用Java内置的网络库来封装一个自己的实现,只是稍麻烦些罢了。
Note:便于应用到Yamba,这里的jtwitter.jar已略作改动。
下载完毕,即可将它加入你的Eclipse项目。需要做的就是打开这个Eclipse项目,把这个文件拖放到Package Manager窗口的根目录之下。这样它就成为了项目的一部分,但我们的Java代码依然不可以访问它。
Java在(http://en.wikipedia.org/wiki/Classpath_(Java))中搜索它所有的类。要让我们的代码可以访问这个三方库,就需要将他的地址添加到classpath。右击你的项目,选择Properties打开Yamba的属性对话框,如 图6.5. "Eclipse中Properties for Yamba对话框中的属性"。找到Java Build Path,选择Libraries页面。在这里单击Add JARs…,找到jtwitter.jar文件,即可将这个JAR文件加入项目。
图 6.5. Eclipse中Properties for Yamba对话框中的属性
Eclipse中Properties for Yamba对话框中的属性
6.5.4. 更新Manifest文件,获取Internet权限
这个程序要正常工作,不能没有Internet的访问权限。Android的安全机制要求为可能的危险操作指明所需的权限。在用户安装应用程序时,必须明确地授予它一定的权限。对应用程序所要求的权限,用户只能全部授予,抑或全部拒绝——没有折中的余地。随后在升级已有应用时,就不再需要用户授权了。
Note:
对通过USB安装、以debug模式运行的程序而言,Android不会询问权限的问题。但是应用要发布,我们就必须为应用程序指明它所需的权限。
在这里,我们要求访问网络服务,因此需要用户为它授予INTERNET的访问权限。双击打开AndroidManifest.xml文件,Eclipse通常会按照WYSIWYG的形式打开它。同前面一样,在这个界面中即可完成绝大部分的工作,但是Eclipse的这一功能并不完整,灵活性也差强人意,我们不如直接修改源文件。因此,选择最右边显示"AndroidManifest.xml"的标签,将<uses-permission android:name="android.permission.INTERNET" />加入<manifest>元素之下。
例 6.4. AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
android:versionCode="1" android:versionName="1.0" package="com.marakana.yamba1">
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".StatusActivity" android:label="@string/titleStatus">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
<uses-sdk android:minSdkVersion="4" />
<uses-permission android:name="android.permission.INTERNET" /><!-- http://dev.icybear.net/learning-android-cn/images/1.png -->
</manifest>
定义<uses-permission>元素,申请INTERNET权限。