Android常见问题及开发经验总结(一)

自己在开发过程中碰到的一些错误 及 一些经验总结,主要针对一些刚开始步入开发行业的新人,大神可直接忽略此贴奋斗。给开发新人提供一些经验介绍!奋斗


从最简单的问题开始来说:

1.R文件缺失 找不到R文件


查看res中资源文件,图片,xml等。

1)比如图片文件名不能有大写不能有空格。2)xml中不能有错误   xml中有错误  记得不要clean项目 一旦clean  所有的类中都会报错显示找不到R文件   最后搞定错误之后  Project->clean就可以了。

 2.空指针异常 


   这个最常见 最初级 但是好多人还是会犯的一个错误。

   1)变量为空  2)控件view为空  这个都是因为没有初始化 的原因。

    举两个简单的例子: String str;   str.equals("s"); //没给str赋值  直接使用 str还是null  

       Button sButton; sButton.setText(""); //没有初始化sButton  sButton 还是null 

 3.ClassNotFoundException Didn't find class "xxx.xxx.xx" 找不到对应的类

   Android常见问题及开发经验总结(一)_第1张图片

这个是因为新加的activity需要在 AndroidManifest.xml 里面注册一下这个类  不然就会报这个异常。

4. java.lang.ClassCastException: 类型转换错误

Android常见问题及开发经验总结(一)_第2张图片

这个是因为 类型转换错误,举个例子  将button 转换为 EditText   LinearLayout 转换为RelativeLayout的时候都会报这个异常 

只需要检查程序中变量或者 view的 类型就可以 

5.java.lang.IndexOutOfBoundsException用非法索引访问数组时抛出的异常


这个在Android中一般在    适配器adapter里面容易出现 ,这个地方一般会产生数据交互。出现这个错误一般直接检查 数据层就可以了。

像这些简单的错误 在后台日志中都可以定位到 当前出现错误的类和第几行  直接找到对应的  检查改掉就好了。


 6.java.lang.SecurityException 缺少权限异常   


这个异常 原因 是没有在AndroidManifest.xml 里面注册相应的权限  看缺少哪个权限 注册一下就ok了!

<uses-permission android:name="android.permission.INTERNET" />写法类似这样 具体缺少哪个权限 改成对应的名字就好



6.android library cannot be launched

点击运行的工程右键出现Properties

Android常见问题及开发经验总结(一)_第3张图片


点击Properties,进入把is library 前的对勾去掉

Android常见问题及开发经验总结(一)_第4张图片


然后重新运行就ok了。



下面介绍一些Android开发中一些常用的经验技巧

1.自定义title栏。

首先要在values->styles中定义一个style,然后在mainfest文件中设置android:theme.
最后在Activity中按照这个顺序写:
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_CUSTOM_TITLE); 
setContentView(R.layout.activity_main);
getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.title_layout);

2.imagView居中显示问题

xml设置如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:orientation="vertical" >
    <ImageView
        android:layout_width="wrap_content"
    android:layout_height="wrap_content"
        android:id="@+id/myImageView"
        android:layout_gravity="center"
        android:scaleType="matrix"
        android:src="@drawable/pic" >
    </ImageView>
</LinearLayout>

3.去掉Activity的标题栏,全屏显示

在manifest文件中修改对应的Avtivity属性。
android:theme="@android:style/Theme.NoTitleBar.Fullscreen"

4.如何修改应用名称及应用图标

修改程序的图标,修改drawable文件夹的i→→c_launcher.png图标,把新的图标改名覆盖就可以了。
如果你要自己的名称,可以修改AndroidManifest.xml的这个节点,application android:icon="@drawable/ic_launcher",不需要加文件扩展名。
ps:有些手机 比如 红米1s 。之前手机安装过程序  然后修改程序图标以后需要重启手机 才能看到修改后的图标。( 应该是手机系统的问题)!


5.调试程序

调试的时候程序如果出错,一般是查看logcat,看error发生的地方,会提示在程序的第几行,然后去找就可以了。
但有些错误没办法定位,那就把日志输出成txt,然后去google,baidu吧。


6.有点击效果的button 设置样式的方法。

首先是准备好按钮不同状态的图片
然后 在res/drawable中定义selectorBtn.xml的xml文件
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- 定义按钮点击时的图片 -->
    <item android:drawable="@drawable/btn_focus" android:state_pressed="true"/>
    <!-- 定义按钮默认的图片 -->
    <item android:drawable="@drawable/btn_default"/>
</selector>
最后Button的background属性中设置
<Button
            android:id="@+id/button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="@drawable/selectorBtn"/>

7、requestCode和resultCode的区别

在使用startActivityForResult()和onActivityResult()时,会分别用到requestCode和resultCode,有时候极容易将2个参数混淆起来。

requestCode 和 resultCode 混淆说明错的。
startActivityForResult(Intent intent, Int requestCode)
intent 传给B的,requestCode >=0就好,随便用于在onActivityResult()区别哪个子模块回传的数据,如果还有C.java ,D甚至E子模块的话,每个区分开不同的requestCode就好。
setResut(int resultCode, Intent intent)
resultCode 如果B子模块可能有几种不同的结果返回,可以用这个参数予以识别区分。这里还有个特殊的 RESULT_OK 值,没有特殊情况用它就好了。intent 继续不解释,传回给A的onActivityResult()
onActivityResult(int requestCode, int resultCode, Intent intent)
这里三个都不用解释了,与上文对应的东西。如果不对requestCode和resultCode 加以识别区分的话,只要有其他activity setResult到了A onActivityResult()会无差别处理。


8、在布局中使用scrollview 实现布局可以滚动效果  (滚动条):

把原来的布局用<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:scrollbars="none"></ScrollView>括起来即可实现视图的滚动。


9、全局变量Application Context

 

创建一个属于你自己的android.app.Application的子类,然后在manifest中申明一下这个类,这是android就为此建立一个全局可用的实例,你可以在其他任何地方使用Context.getApplicationContext()方法获取这个实例,进而获取其中的状态(变量)。 下面看一下Demo:

class MyApp extends Application {

private String myState; 

public String getState(){ 

return myState; 

public void setState(String s){ 

myState = s; 

class Blah extends Activity { 

@Override 

public void onCreate(Bundle b){ 

... 

MyApp appState = ((MyApp)getApplicationContext()); 

String state = appState.getState(); 

... 

这个效果就是使用静态变量是一样的,但是其更符合android的架构体系。 使用这种方法的话需要在AndroidManifest.xml中配置一下:

<application android:name=".MyApp" 

       android:icon="@drawable/icon" 

       android:label="@string/app_name">


 




你可能感兴趣的:(android常见错误,android错误总结,Android开发经验,android开发技巧,Android错误整理)