Android程式编写及调试新手入门-3

BY:Mercury@阿肆

欢迎转载,请署名出处即可!

阅读及修改code

接下来,我们要进入修改code的阶段,一下的步骤笔者已经全部走过一边,由于我们使用的例子来自早期的Androidsdk版本,所以其中有部分的使用方法已经不适合当前的SDK,再次强调一下,本文档使用的sdk版本为android sdk1.0版本,此文章撰写时已经有1.1版本release了,所以如果有出现由于版本不匹配导致的问题,您完全可以参照本例子修改的方法来修改问题。好了,我们开始修改code

首先,我们按照上一节中的目录树的顺序来修改我们的code,以下我们以每个.java文档为标题来分析下code

CanvasExample.java //一个简单的撞球测试事例

这个事例很有意思,两个小球撞,然后交叉的一瞬间发出一声“噗”的声音。这个事例的价值在于以下几点:

1. 图片的调用

2. 图片的移动

3. MP3音频文件的调用

这三个应用,我相信在大多数的软件开发中,或多或少都会用到,下面我们来分析下代码中一些比较重要的地方,由于篇幅有限,我们只分析主要功能部分和可能出现问题的部分。

这里穿插个小诀窍,Eclipse是个非常好的IDE软件。不但能编写c/c++java等等,而且能写网页程式、应用程式等等,我们现在读写的代码量不是很大,但是一旦大起来行数就估计是上千行的代码,如果我们想看我们的代码倒地有多少行呢?很简单了,在程式编辑区,我们点击鼠标右键,接下来我们能看到如下图10所示的一个菜单,


10 显示菜单

如图所示,我们选择“Preference”,接下来,大家会看到一个形如图11所示的对话框,


11 属性对话框

不用我多说大家一定能找到一行熟悉的功能选择项:“Show Line Numbers”,好了,点击OK,我们进入CanvasExample的修改和阅读。

问题1import 中的错误:

我们第一个遇到的问题就是import的一个小红叉,具体形如下图12所示:

12 import 问题

我们遇到小红叉,首先可以在小红叉上点击下左键,eclipse会弹出来一个提示,提示您可以解决这个错误的方法,这里我们选择屏蔽该句语句来排除错误,这是因为,您可以到http://developer.android.com/reference/packages.html下去查找一下这个包,很遗憾的是,这个包已经不复存在,具体消失的原因不明,可能是有bug或者占用系统资源过多,这个不用我们去细究,我们屏蔽它,一个小红叉子就这样解决了。

问题2 程式中的函数:

接下来的错误发生在48行左右,具体情况如图13所示,

13 函数问题

函数名在不同的版本中有相应的修订,比如我们这个问题中出现的小红叉,就是因为不通版本的sdk导致的,但是不用担心,我们依然按照上述的方法,点击下小红叉,我们知道了错误的愿意,系统提示我们修改canvas.getBitmapWidth()canvas.getBitmapHeight()两个函数的函数名,这是,大家完全可以再回到我们的http://developer.android.com/reference/packages.html来查查,依然很不幸,找不到这两个东东,但是我们看看他们的类对象canvas,大家可以在http://developer.android.com/reference/android/graphics/Canvas.html下看到对它的详细描述,这里我们节约时间,修改好这两个函数就好了,大家可以仔细参阅下以上的网站来学习。

这时候我们会发现,这个CanvasExample中的错误都没有了,这里我们暂时放下,进入下一个程式文档的调试,先埋一个伏笔,这个程式有一个bug会让我们很无奈。等跑到了我们再回来改改。

接下来,我们快速的把整个程式文档中的功能来过一遍,我们只看具体的函数名来分析功能,内部的实现只说比较主要的,其他由于篇幅限制不提及。

首先,我们看到import了很多的包,一共13个。如果大家有兴趣的话可以去http://developer.android.com/reference/packages.html具体了解下包的用法,接下来,我们进入主要程式部分,java的特点这里稍微提下大家应该都是知道的,java是一个纯的面向对象的语言,好了,所有的东西我们看成类来处理就好了,这里我们建立了一个名曰CanvasExample的基于Activity的类作为整个功能的主类,接下去是一些对象和变量的定义,这里我们看到了一个CustomView,这个是一个什么来的呢?

我们往下看能看到它的本尊,其实他是一个View类的扩展类,这里我们把他作为CanvasExample的一个保护类来实现,它的里面可谓是五脏俱全了,我们主要的功能实现都在它的实现中,起始当然是一些变量和对象的定义,接下来是这个类的成员函数实现,我们一次列出来给大家通过注释的方式解释下功能,具体如下文所描述:

l CustomView //构造函数,准备画小球放音乐;

l drawSprint //画小球(保护成员函数);

l onDraw //画画函数,放音乐函数(公共成员函数);

好了,其中的实现部分大家自己好好研究下,接下来的一些函数是一些必备的公共函数,我们也按照上面的方法来简单描述下,具体实现大家自己研究下:

l onCreate //创建此功能;

l onKeyDown //按下键触发事件;

l onDestroy //功能销毁;

l onPause //功能暂停;

l onResume //功能恢复;

我们就这样先去除掉了一个文档中的所有小红叉,不要停下来,我们继续!

getSplashy.java //开机logo,程式欢迎界面

这个程式文档中没有任何的错误,我们很高兴的跳过它。

loginScreen.java //登录模拟程式

登录模式程式,说白了是一个假登录,这里是所要实现的功能和我们可能有应用到的功能如下:

1. 对话框的使用;

2. 提交对话框中的内容;

3. 用一个提示对话框来现实我们输入的内容(笔者扩展功能);

和上面分析方式一样,我们首先来改改小红叉,看着他们在心烦意乱的没办法阅读好真个程式文档。

问题1showalert成员函数

这次我们遇到的只有一个问题,但是这个问题实在是对我们来说比较无奈,还是老方法,大家去查下ShowAlert这个成员函数会发现,非常无奈的,没有了。但是我们又非常强烈的意识到,这个提示对话框的重要性,基本上应用程式软件里多多少少都要用到,所以我们要自己来实现这个功能,如何实现能?

其实我们仔细想想,无非不就是一个对话框的弹出,而且显示了我们输入的相关内容,有确定,有关闭,好了,我们就建立个对话框然后做一些相应的处理。

首先我们先把“this.showAlert("Login Data", 0, "Login" ……”这行程式给注释掉,先让小红叉消失。接下来我们分析下对话框程式的实现,这里为了节约大家宝贵的时间,我直接把我已经调试好放上来给大家分析下,具体如下:

import android.app.AlertDialog;//引用对话框包

import android.content.DialogInterface; //引用对话框包中现实内容的接口

//modify by mercury xu 20090314 in the new sdk

//they don't support this function as showAlert!

//this.showAlert("Login Data", 0, "Login" + usrTxt + " : " + pwdTxt, "ok!", false);

new AlertDialog.Builder(loginScreen.this)//新建一个对话框对象

.setTitle("Login Data")//设置对话框名称

.setMessage("Login :" + usrTxt + "/n"+ "Password : " + pwdTxt)

//设置对话框内现实内容,获取两个输入框中的内容

.setIcon(R.drawable.icon)//选择对话框现实图标

.setPositiveButton("Yes", new DialogInterface.OnClickListener() {

public void onClick(DialogInterface dialog, int whichButton) {

setResult(RESULT_OK); //确认按钮实现

finish();//关闭对话框

}

})

.setNegativeButton("No", new DialogInterface.OnClickListener() {

public void onClick(DialogInterface dialog, int whichButton) {

}

}) //取消按钮实现

.show(); //关闭对话框

到这里这个showalert的替代实现方法分析完了,至于输入框传值在grabEnteredText中实现按钮的提交的功能在onClick中实现。请大家仔细阅读。

MainMenu.java //主菜单

直入正题,修改错误小红叉!

问题1 OnFocusChangeListener

这个问题我们直接看看他的错误提示,如下图14所示:

14 OnFocusChangeListener 问题

我们直接参考系统提出的修改意见来修订,我们会发现出现一个新的函数定义部分,具体如下代码所示:

public void onFocusChanged(View v, boolean hasFocus)

{

adjustTextColor(v, hasFocus);

}

public void onFocusChange(View v, boolean hasFocus) {

// TODO Auto-generated method stub

}

……

}

这行代码让我们看的很无奈,onFocusChangedonFocusChange。这只是SDK版本的不同所导致,具体详情大家可以查看下相关的文档提示;我们为了减少代码量,直接把上面的onFocusChanged修改下就可以了,下面系统帮助我们生成的可以不要了。

问题2 setBackground 问题

同样这里是由于setBackground已经不在新的SDK中,这里我们点击小红叉,有如下的提示如图15所示:

15 setBackground 问题

这里由于我们是要引用一个资源,当然,我们选择“setBackgroundResource”来代替他,其他的函数大家可以参考相关资料来学习。

问题3 setAlignment

这个问题是一个比较头痛的问题,因为引用它的对象title是来自TextView,而TextView中已经没有setAlignment这个函数,这个函数已经被移动到了Layout,如果我们要修改动作幅度还是有些大,对于新手来说可以尝试,这里我们由于时间关系,我们暂时把这句话屏蔽处理。

问题4 import处的警告

这个时侯我们回头会看到import会有很多黄色的感叹号,也就是警告,虽然不是错误,但是还是看着烦,这时候我们还是用老方法,点击下小黄感叹号,好了,系统给出了一个建议,如下图16所示:

16 import警告

第一个方法,删除import,这个我们肯定不能做,第二个组织imports,第三个,加一个“unused”来处理重复的调用,这里为了减少代码量,我们重新组织下import

这个程式文档主要实现的是对2个功能程式之间的调用,重点要阅读的几个函数如下:

l onClick //点击事件相应

l onCreate //创建功能

l onFocusChange //焦点变化处理

R.java //资源文件

这个程式文档中没有任何的错误,我们很高兴的跳过它。但是这个文件我们需要阅读,因为他是所有资源注册的一个文件,图像,音频文件都有在它这里登记一个编号,系统调用是才可以用到,这个大家要注意的。

Login.xml //登录界面配置

这是唯一一个非.java文件出错的文件。这个文件主要是负责对登录功能界面的处理,这里出错的主要原因为:“ERROR No resource identifier found for attribute 'textAlign' in package 'android'”,无法识别'textAlign'这个功能,这也是由于SDK导致,处理方法与在MainMenu中的处理方法类似,直接删除“android:textAlign="center"”这句话即可

这样一来,我们就基本上把小红叉干掉了,接下来我们可以再来debug/run一次了。

更多相关文章

  1. 星云精准测试对安卓底层驱动代码的测试案例分析
  2. Android音频系统之AudioTrack起播线与underrun问题研究(Android(
  3. Android(安卓)Rild模块源码分析
  4. Visual Studio 跨平台开发实战--- Hello Xamarin! [Visual Studi
  5. android在framework层增加自己的service仿照GPS
  6. 可左右两侧挤压傍边布局的Android抽屉
  7. Dalvik虚拟机JNI方法的注册过程分析
  8. Android单元测试研究与实践
  9. Android(安卓)+ HTML开发手机应用 demo 代码

随机推荐

  1. 详解sql中的参照完整性(一对一,一对多,多对
  2. MySQL DML语句整理汇总
  3. 软件测试-MySQL(六:数据库函数)
  4. 腾讯面试:一条SQL语句执行得很慢的原因有
  5. MySQL常用类型转换函数总结(推荐)
  6. 详解mysql解压缩版安装步骤
  7. Mysql的Binlog数据恢复:不小心删除数据库
  8. 详解MySQL开启远程连接权限
  9. mysql 8.0.11安装教程图文解说
  10. 简单谈谈Mysql索引与redis跳表