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" 找不到对应的类
这个是因为新加的activity需要在 AndroidManifest.xml 里面注册一下这个类 不然就会报这个异常。
4. java.lang.ClassCastException: 类型转换错误
这个是因为 类型转换错误,举个例子 将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,
点击Properties,进入把is library 前的对勾去掉
然后重新运行就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">
相关文章
- LibreOffice 7.5 发布:漂亮的新应用图标和酷炫功能
- elementary OS 7 发布
- Windows 应用兼容层 Wine 8.1 发布:默认启用“Windows 10”前缀
- 微软正测试新功能:当 Windows 11 有新的小组件可用时会提醒通知
- 解析分布式存储选型和应用九个典型问题
- ClickHouse在自助行为分析场景的实践应用
- Chrome DevTools 远程调试安卓网页的原理
- Uni-app + Vue3 页面如何跳转及传参?
- 微软证实系统还原点会损坏 Windows 11 22H2 版本应用程序
- 巧用 Transition 实现短视频 APP 点赞动画
- 初学者试试,HarmonyOS应用开发者基础认证
- 媒体实测微软 Windows 开发工具包 2023:存在不兼容 HDR 显示器、某些应用无法运行等问题
- 快速了解Navigator API SetAppBadge
- 微软 Windows 11 Dev 预览版 Build 25276 发布,应用兼容问题对话框 UI 改进
- 基于Next.js、Prisma、Postgres和Fastfy构建全栈APP
- 开始菜单搜索框变圆角,微软 Windows 11 Beta 预览版 22621.1095 和 22623.1095 发布
- 2022-2023 十大应用开发趋势
- 观远数据发布业内首部《移动BI白皮书》,深入业务数字化场景重新定义移动BI
- Windows 10 学院:不借助第三方工具如何卸载 Windows 10 预装应用
- 正处高质量发展期,我国大数据产业突破1.3万亿元