技术开发 频道

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

        【IT168 技术文档】接下来,我们要进入修改code的阶段,一下的步骤笔者已经全部走过一边,由于我们使用的例子来自早期的Android的sdk版本,所以其中有部分的使用方法已经不适合当前的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的修改和阅读。

        问题1,import 中的错误:

        我们第一个遇到的问题就是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.        用一个提示对话框来现实我们输入的内容(笔者扩展功能);

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

        问题1:showalert成员函数

        这次我们遇到的只有一个问题,但是这个问题实在是对我们来说比较无奈,还是老方法,大家去查下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

                   

                      }

        ……

        }

         这行代码让我们看的很无奈,onFocusChanged和onFocusChange。这只是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一次了。

0
相关文章