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

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

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

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

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

image.png

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


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


2.空指针异常  

image.png

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


  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" 找不到对应的类

image.png

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

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

image.png

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


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


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

image.png

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


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


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

image.png

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


写法类似这样 具体缺少哪个权限 改成对应的名字就好


6.android library cannot be launched

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

image.png

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

image.png

然后重新运行就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设置如下:

   android:layout_width="fill_parent"

   android:layout_height="wrap_content"

   android:layout_gravity="center"

   android:orientation="vertical" >

 

       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" >

 


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文件

 

 

 

 

最后Button的background属性中设置

           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 实现布局可以滚动效果  (滚动条):

把原来的布局用

   android:layout_width="fill_parent"

   android:layout_height="wrap_content"

   android:scrollbars="none">括起来即可实现视图的滚动。


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中配置一下:



      android:icon="@drawable/icon"


      android:label="@string/app_name">



相关文章
|
14天前
|
搜索推荐 前端开发 API
探索安卓开发中的自定义视图:打造个性化用户界面
在安卓应用开发的广阔天地中,自定义视图是一块神奇的画布,让开发者能够突破标准控件的限制,绘制出独一无二的用户界面。本文将带你走进自定义视图的世界,从基础概念到实战技巧,逐步揭示如何在安卓平台上创建和运用自定义视图来提升用户体验。无论你是初学者还是有一定经验的开发者,这篇文章都将为你打开新的视野,让你的应用在众多同质化产品中脱颖而出。
40 19
|
14天前
|
JSON Java API
探索安卓开发:打造你的首个天气应用
在这篇技术指南中,我们将一起潜入安卓开发的海洋,学习如何从零开始构建一个简单的天气应用。通过这个实践项目,你将掌握安卓开发的核心概念、界面设计、网络编程以及数据解析等技能。无论你是初学者还是有一定基础的开发者,这篇文章都将为你提供一个清晰的路线图和实用的代码示例,帮助你在安卓开发的道路上迈出坚实的一步。让我们一起开始这段旅程,打造属于你自己的第一个安卓应用吧!
41 14
|
17天前
|
Java Linux 数据库
探索安卓开发:打造你的第一款应用
在数字时代的浪潮中,每个人都有机会成为创意的实现者。本文将带你走进安卓开发的奇妙世界,通过浅显易懂的语言和实际代码示例,引导你从零开始构建自己的第一款安卓应用。无论你是编程新手还是希望拓展技术的开发者,这篇文章都将为你打开一扇门,让你的创意和技术一起飞扬。
|
15天前
|
XML 存储 Java
探索安卓开发之旅:从新手到专家
在数字时代,掌握安卓应用开发技能是进入IT行业的关键。本文将引导读者从零基础开始,逐步深入安卓开发的世界,通过实际案例和代码示例,展示如何构建自己的第一个安卓应用。我们将探讨基本概念、开发工具设置、用户界面设计、数据处理以及发布应用的全过程。无论你是编程新手还是有一定基础的开发者,这篇文章都将为你提供宝贵的知识和技能,帮助你在安卓开发的道路上迈出坚实的步伐。
29 5
|
14天前
|
开发框架 Android开发 iOS开发
安卓与iOS开发中的跨平台策略:一次编码,多平台部署
在移动应用开发的广阔天地中,安卓和iOS两大阵营各占一方。随着技术的发展,跨平台开发框架应运而生,它们承诺着“一次编码,到处运行”的便捷。本文将深入探讨跨平台开发的现状、挑战以及未来趋势,同时通过代码示例揭示跨平台工具的实际运用。
|
15天前
|
XML 搜索推荐 前端开发
安卓开发中的自定义视图:打造个性化UI组件
在安卓应用开发中,自定义视图是一种强大的工具,它允许开发者创造独一无二的用户界面元素,从而提升应用的外观和用户体验。本文将通过一个简单的自定义视图示例,引导你了解如何在安卓项目中实现自定义组件,并探讨其背后的技术原理。我们将从基础的View类讲起,逐步深入到绘图、事件处理以及性能优化等方面。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的见解和技巧。
|
15天前
|
搜索推荐 前端开发 测试技术
打造个性化安卓应用:从设计到开发的全面指南
在这个数字时代,拥有一个定制的移动应用不仅是一种趋势,更是个人或企业品牌的重要延伸。本文将引导你通过一系列简单易懂的步骤,从构思你的应用理念开始,直至实现一个功能齐全的安卓应用。无论你是编程新手还是希望拓展技能的开发者,这篇文章都将为你提供必要的工具和知识,帮助你将创意转化为现实。
|
18天前
|
Java 调度 Android开发
安卓与iOS开发中的线程管理差异解析
在移动应用开发的广阔天地中,安卓和iOS两大平台各自拥有独特的魅力。如同东西方文化的差异,它们在处理多线程任务时也展现出不同的哲学。本文将带你穿梭于这两个平台之间,比较它们在线程管理上的核心理念、实现方式及性能考量,助你成为跨平台的编程高手。
|
15天前
|
Java Android开发 开发者
探索安卓开发:构建你的第一个“Hello World”应用
在安卓开发的浩瀚海洋中,每个新手都渴望扬帆起航。本文将作为你的指南针,引领你通过创建一个简单的“Hello World”应用,迈出安卓开发的第一步。我们将一起搭建开发环境、了解基本概念,并编写第一行代码。就像印度圣雄甘地所说:“你必须成为你希望在世界上看到的改变。”让我们一起开始这段旅程,成为我们想要见到的开发者吧!
24 0
|
18天前
|
存储 监控 Java
探索安卓开发:从基础到进阶的旅程
在这个数字时代,移动应用已成为我们日常生活的一部分。对于开发者来说,掌握安卓开发不仅是技能的提升,更是通往创新世界的钥匙。本文将带你了解安卓开发的核心概念,从搭建开发环境到实现复杂功能,逐步深入安卓开发的奥秘。无论你是初学者还是有经验的开发者,这篇文章都将为你提供新的见解和技巧,帮助你在安卓开发的道路上更进一步。
19 0