android新手开发常见问题合集(不断update)


刚跟同学合作了一个重力感应控制的小游戏(等美工弄好以后,会将代码开源出来~),结合以前开发的小应用的经验,总结了一下~

针对的是eclipse下android2.2的开发,希望对刚涉足的android开发的朋友有些帮助~



xml编辑

eclipse中xml编辑部分功能较弱。

比如 自己写了个myView,在xml文件中不小心弄错了myview的名字,eclipse不会报错,运行才会出问题。

对于无法build的莫名的情况,可以参考这个因素。


Clean Project

总之,遇到莫名其妙的问题的时候,可以尝试 project --> clean . 然后重新build整个工程

印象中,不少次都是这么解决的问题。开源的东西还是有些不稳定啊~

比如:

Failed to install *.apk on device '*': Local path doesn't exist. 
com.android.ddmlib.SyncException: Local path doesn't exist. 

Launch canceled!
 

unable to start activity component info \ unable to find explicit activity class:

应该是因为在app的配置文件AndroidMainfest.xml中,没有声明新添加的Activity。刚开始android开发的时候,很容易犯的错误。

android中的context

根据context这个单词直译,是上下文。这个意思与它的含义也相差不多了。下面一段是androidsdk的doc中对context的描述:

Interface to global information about an application environment. This is an abstract class whose implementation is provided by the Android system. It allows access to application-specific resources and classes, as well as up-calls for application-level operations such as launching activities, broadcasting and receiving intents, etc.

翻译为:这是与应用环境的整体信息之间的接口。他是一个抽象类,由android系统实现。经由它,能访问应用特定的资源和类,以及唤醒应用层的操作比如开启一个activity、broadcasting 和接收intent等等。

引用网上的说法:“很多方法需要通过Context才能识别调用者的实例,一般在Activity中我们直接用this代替,代表调用者的实例为Activity,而到了一个button的onClick(View view)等方法时,我们用this时就会报错,所以我们可能使用ActivityName.this来解决,主要原因是因为实现Context的类主要有Android特有的几个模型,Activity、Service以及BroadcastReceiver。”

个人理解,这其实就是整个app运行环境的一个代名词。我们的app需要跑在手机上,而手机这个大环境,就是以context的身份出现在我们的编程代码中。注意到,android开发中的几大元素都是由context继承而来的,比如activity,Service等,这或许有助于理解,为什么Activity的this有时候可以作为context。

context的存在,让底层许多实现细节与我们无关,是开发者的一个幸事。

或许这么说,还显得比较虚,那么我举一个实例帮助大家理解:

GameActivity是游戏的主体类,在这个activity中,有一个 surfaceView,实现动画效果和用户交互。在用户与surfaceview交互的过程中,app需要产生一个dialog。

实现的方法有两种。

一种是设置对GameActivity的回调函数,让外层作为载体的activity来产生Dialog。

另一种则是由SurfaceView产生。这里涉及到一个问题:Dialog的产生是需要Context的。可以理解为,Context是Dialog这种元素植根的土壤,它必须依附在手机上才能生存。解决的办法是,在GameActivity产生SurfaceView时,就传递自己的Context给SurfaceView,而后再通过这个Context创建Dialog。

关于context,这里还有更多的解释

startActivity的参数到底是什么?

有时候,我们看到startActivity(a.this , B.class),有时候,却又是startActivity(this , B.class)。

细致点,我们会发现,其实第一种情况往往发生在Button的Onclick中,而后者只能用在Activity(或者其他context的衍生类)自身里。

下面的思路可以解释清楚问题。Button可以看作是代码中的B,func即为Button的OnClick,而A就是Activity。

class A { B mB = new B { public void fun () { fun2 (A.this) //这里写A.this是为了避免 this混淆为B的对象,这是内部类中的实现方法。 } }



View的 OnKeyDown无响应

当Activity中拥有各种View时,若想其中的一个View 拥有自己的OnKeyDown,则载体的Activity是可以有重写的OnKeyDown的。否则,会优先相应Activity的OnKeyDown。


onActivityResult无响应
调用了activityonresult,但新activity结束后, onActivityResult()没有响应。

1,可能是activityonresult()的参数问题。requestCode必须大于一才能激发onActivityResult。

2,activityonresult开启的新activity结束时不是用的finish()。 只有用finish()结束的才能正确的激发onActivityResult(),其他的结束方式都不可以。


导入的工程时 R.java错误:
1,看res中资源是否同名而后缀不同。eclipse允许加入这种资源,但无法生成R.java文件。
2,看是否存在import Android.R ;的自动解析错误。有时候eclipse似乎会自动的添加显性的import Android.R,而不是app自己的R。只要修改为导入自己的R就解决问题了。3, eclipse里导入项目时,需要选择 new -> project -> android proect -> create project from existing sample ,否则R.java文件无法自动生成。这个问题搞得我狼狈了好久……不知到原理额。有懂的朋友可以做一下补充^^。


重写HOME键

一般情况下都是不重写HOME键的,androidSDK中虽然有地KeyDown的重写,但并不简单的支持对HOME的重写,或许是考虑到android多任务的需要,而home键是保持多任务的重要部分。

网上查到有些方法可以重写HOME的,但会带来一些负面效果:

见转载


Failure INSTALL_FAILED_MEDIA_UNAVAILABLE

Ensure that you have enough internal and external free space in your device.

安装的时候出现这个错误,可以仔细检查下,是否是自己的手机存储空间不够。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值