当前位置:首页 » 安卓系统 » android异常类型

android异常类型

发布时间: 2022-06-11 01:54:03

1. 为什么Android应用异常

是应用自身或者系统导致的异常,如内存不足,内存泄露,应用自身处理流程产生了异常,对特殊场景没有考虑和测试全面,对文件的读写,网络的存取,数据库的查询等没有处理好或者没有及时响应用户的操作等都会产生异常。
望采纳。

2. 安卓常见异常

java中异常机制的一些概念。写本文的目的在于方便我很长时间后若是忘了这些东西可以通过这篇文章迅速回忆起来。
1. 异常机制
1.1 异常机制是指当程序出现错误后,程序如何处理。具体来说,异常机制提供了程序退出的安全通道。当出现错误后,程序执行的流程发生改变,程序的控制权转移到异常处理器。
1.2 传统的处理异常的办法是,函数返回一个特殊的结果来表示出现异常(通常这个特殊结果是大家约定俗称的),调用该函数的程序负责检查并分析函数返回的结果。这样做有如下的弊端:例如函数返回-1代表出现异常,但是如果函数确实要返回-1这个正确的值时就会出现混淆;可读性降低,将程序代码与处理异常的代码混爹在一起;由调用函数的程序来分析错误,这就要求客户程序员对库函数有很深的了解。
1.3 异常处理的流程
1.3.1 遇到错误,方法立即结束,并不返回一个值;同时,抛出一个异常对象
1.3.2 调用该方法的程序也不会继续执行下去,而是搜索一个可以处理该异常的异常处理器,并执行其中的代码
2 异常的分类
2.1 异常的分类
2.1.1 异常的继承结构:基类为Throwable,Error和Exception继承Throwable,RuntimeException和 IOException等继承Exception,具体的RuntimeException继承RuntimeException。
2.1.2 Error和RuntimeException及其子类成为未检查异常(unchecked),其它异常成为已检查异常(checked)。
2.2 每个类型的异常的特点
2.2.1 Error体系 Error类体系描述了Java运行系统中的内部错误以及资源耗尽的情形。应用程序不应该抛出这种类型的对象(一般是由虚拟机抛出)。如果出现这种错误,除了尽力使程序安全退出外,在其他方面是无能为力的。所以,在进行程序设计时,应该更关注Exception体系。
2.2.2 Exception体系 Exception体系包括RuntimeException体系和其他非RuntimeException的体系
2.2.2.1 RuntimeException RuntimeException体系包括错误的类型转换、数组越界访问和试图访问空指针等等。处理RuntimeException的原则是:如果出现 RuntimeException,那么一定是程序员的错误。例如,可以通过检查数组下标和数组边界来避免数组越界访问异常。
2.2.2.2 其他(IOException等等)这类异常一般是外部错误,例如试图从文件尾后读取数据等,这并不是程序本身的错误,而是在应用环境中出现的外部错误。
2.3 与C++异常分类的不同
2.3.1 其实,Java中RuntimeException这个类名起的并不恰当,因为任何异常都是运行时出现的。(在编译时出现的错误并不是异常,换句话说,异常就是为了解决程序运行时出现的的错误)。
2.3.2 C++中logic_error与Java中的RuntimeException是等价的,而runtime_error与Java中非RuntimeException类型的异常是等价的。
3 异常的使用方法
3.1 声明方法抛出异常
3.1.1 语法:throws(略)
3.1.2 为什么要声明方法抛出异常?方法是否抛出异常与方法返回值的类型一样重要。假设方法抛出异常确没有声明该方法将抛出异常,那么客户程序员可以调用这个方法而且不用编写处理异常的代码。那么,一旦出现异常,那么这个异常就没有合适的异常控制器来解决。
3.1.3 为什么抛出的异常一定是已检查异常? RuntimeException与Error可以在任何代码中产生,它们不需要由程序员显示的抛出,一旦出现错误,那么相应的异常会被自动抛出。而已检查异常是由程序员抛出的,这分为两种情况:客户程序员调用会抛出异常的库函数(库函数的异常由库程序员抛出);客户程序员自己使用throw语句抛出异常。遇到Error,程序员一般是无能为力的;遇到RuntimeException,那么一定是程序存在逻辑错误,要对程序进行修改(相当于调试的一种方法);只有已检查异常才是程序员所关心的,程序应该且仅应该抛出或处理已检查异常。
3.1.4 注意:覆盖父类某方法的子类方法不能抛出比父类方法更多的异常,所以,有时设计父类的方法时会声明抛出异常,但实际的实现方法的代码却并不抛出异常,这样做的目的就是为了方便子类方法覆盖父类方法时可以抛出异常。
3.2 如何抛出异常
3.2.1 语法:throw(略)
3.2.2 抛出什么异常?对于一个异常对象,真正有用的信息时异常的对象类型,而异常对象本身毫无意义。比如一个异常对象的类型是 ClassCastException,那么这个类名就是唯一有用的信息。所以,在选择抛出什么异常时,最关键的就是选择异常的类名能够明确说明异常情况的类。
3.2.3 异常对象通常有两种构造函数:一种是无参数的构造函数;另一种是带一个字符串的构造函数,这个字符串将作为这个异常对象除了类型名以外的额外说明。
3.2.4 创建自己的异常:当Java内置的异常都不能明确的说明异常情况的时候,需要创建自己的异常。需要注意的是,唯一有用的就是类型名这个信息,所以不要在异常类的设计上花费精力。
3.3 捕获异常如果一个异常没有被处理,那么,对于一个非图形界面的程序而言,该程序会被中止并输出异常信息;对于一个图形界面程序,也会输出异常的信息,但是程序并不中止,而是返回用户界面处理循环中。
3.3.1 语法:try、catch和finally(略)控制器模块必须紧接在try块后面。若掷出一个异常,异常控制机制会搜寻参数与异常类型相符的第一个控制器随后它会进入那个catch 从句,并认为异常已得到控制。一旦catch 从句结束对控制器的搜索也会停止。 3.3.1.1 捕获多个异常(注意语法与捕获的顺序)(略)
3.3.1.2 finally的用法与异常处理流程(略)
3.3.2 异常处理做什么?对于Java来说,由于有了垃圾收集,所以异常处理并不需要回收内存。但是依然有一些资源需要程序员来收集,比如文件、网络连接和图片等资源。
3.3.3 应该声明方法抛出异常还是在方法中捕获异常?原则:捕捉并处理哪些知道如何处理的异常,而传递哪些不知道如何处理的异常
3.3.4 再次抛出异常
3.3.4.1 为什么要再次抛出异常?在本级中,只能处理一部分内容,有些处理需要在更高一级的环境中完成,所以应该再次抛出异常。这样可以使每级的异常处理器处理它能够处理的异常。
3.3.4.2 异常处理流程对应与同一try块的catch块将被忽略,抛出的异常将进入更高的一级。
4 关于异常的其他问题
4.1 过度使用异常首先,使用异常很方便,所以程序员一般不再愿意编写处理错误的代码,而仅仅是简简单单的抛出一个异常。这样做是不对的,对于完全已知的错误,应该编写处理这种错误的代码,增加程序的鲁棒性。另外,异常机制的效率很差。
4.2 将异常与普通错误区分开对于普通的完全一致的错误,应该编写处理这种错误的代码,增加程序的鲁棒性。只有外部的不能确定和预知的运行时错误才需要使用异常。
4.3 异常对象中包含的信息一般情况下,异常对象唯一有用的信息就是类型信息。但使用异常带字符串的构造函数时,这个字符串还可以作为额外的信息。调用异常对象的getMessage()、toString()或者printStackTrace()方法可以分别得到异常对象的额外信息、类名和调用堆栈的信息。并且后一种包含的信息是前一种的超集。

3. 在android中,数据下标越界,则发生什么异常

在android中,数据下标越界,会发生IndexOutOfBoundsException——下标越界异常。

Android应用使用Java语言进行开发,常见的异常还有:
1、NullPointerException - 空指针引用异常;
2、ClassCastException - 类型强制转换异常;
3、IllegalArgumentException - 传递非法参数异常;
4、ArithmeticException - 算术运算异常;
5、ArrayStoreException - 向数组中存放与声明类型不兼容对象异常;
6、NegativeArraySizeException - 创建一个大小为负数的数组错误异常;
7、NumberFormatException - 数字格式异常;
8、SecurityException - 安全异常;
9、UnsupportedOperationException - 不支持的操作异常。

4. android 404 对应哪个异常

android 404是指请求的url地址不存在。是http协议的一部分,详解请看android学习手册,

上面内容来源于andrid学习手册,里面有108个例子,文档还有源码,360手机助手中下载



404

(HTTP状态码)

编辑

HTTP 404或Not Found错误信息是HTTP的其中一种“标准回应信息”(HTTP状态码),此信息代表客户端在浏览网页时,服务器无法正常提供信息,或是服务器无法回应且不知原因。

中文名

网页或文件未找到

外文名

NOT FOUND

HTTP状态码

404

目录

1影响

2实现

3设置

影响

编辑

自定义404错误页面是增强用户体验的很好的做法,但在应用过程中往往并未注意到对搜索引擎的影响,譬如:错误的服务器端配置导致返回“404”状态码或自定义404错误页面使用Meta Refresh导致返回“302”状态码。正确设置的自定义404错误页面,不仅应当能够正确地显示,同时,应该返回“404”错误代码,而不是 “200”或“302”。虽然对访问的用户而言,HTTP状态码究竟是“404”还是“200”来说并没有什么区别,但对搜索引擎这则是相当重要的。

搜索引擎蜘蛛在请求某个URL时得到“404”状态回应时,即知道该URL已经失效,便不再索引该网页,并向数据中心反馈将该URL表示的网页从索引数据库中删除,当然,删除过程有可能需要很长时间;而当搜索引擎得到“200”状态码时,则会认为该url是有效的,便会去索引,并会将其收录到索引数据库,这样的结果便是这两个不同的url具有完全相同的内容:自定义404错误页面的内容,这会导致出现复制网页问题。轻则被搜索引擎降权,重则会K掉网站。

实现

编辑

改变服务器默认错误页面就可以达到效果。下面是一些可以使得访客轻松实现正常访问的建议。

遵循的理念:

有趣的404(18张)

提供简明的问题描述,消除访客的挫败感。提供合理的解决方案,辅助访客完成访问目标。提供个性化的友好界面,提升访问体验。

实现方式(按照从简单到复杂的顺序排列):

使得访客转到某个地方而不是后退。

页面包含该站点重要部分的链接,如主页或站点地图。不要仅仅告诉他们检查拼写。使用文本的链接替代图片,因为有许多访客不会想到点击这个图片。

例子:我们的站点有一个主页的返回链接。这是实现友好反馈的最低限度。此外,我们还会考虑,在有效的帮助信息不足的情况下,如何通过访客的反馈弥补错误。

需要包括一个指向网站管理员的email链接,或者一个用于提交丢失链接的表格。

相对于发送email,访客更喜欢使用提交表格。

加入一个搜索框用于搜索站点。

例:MSN在所有页面的底部都有一个搜索框,同时也链向站点的重要部分。

在站点中列出接近于访客期望页面的链接,用于推测访客正在寻找的页面。你不需要采纳上述所有的建议,但是这些建议一致服务于使得访客更愿意停留在你的站点的目的。

合理的404错误页面至此即可以完成了,这将给访客提供许多有价值的信息。[1]

设置

编辑

1. 对于存在的网页内容由于路径改变而导致访问不了时,可在IIS 中定义404错误指向一个动态页面,在页面里面使用301永久重定向跳转到新的地址,此时服务器返回301状态码。

2、设置404指向一个设计好的html 文件,此时页面返回的404状态码。 idc提供商基本都提供404设置的功能,直接上传文件设置即可。在IIs中设置方法:打开IIS管理器-->点击要设置自定义404的网站的属性-->点击自定义错误选项-->选中404页-->选中并打开编辑属性-->设置成 URL --> URL 里填写“/err404.html”-->按确定退出再把做好的err404.html 页面上传到网站根目录下。此处在“消息类型”中一定要选择“文件”或“默认值”,而不要选择“URL”,不然,将导致返回“200”状态码。3、404指向一个动态页面,比如error.asp,如果不在页面里面进行设置,仅仅是返回提示的HTML 代码,将导致页面返回200 状态码,这是不正确的,我们可以在显示完提示内容后,增加语句: Response.Status="404 Not Found" ,这样就保证页面返回404状态码。

3、Apache下设置404错误页面。为Apache Server设置404错误页面的方法很简单,只需在.htaccess 文件中加入如下内容即可,ErrorDocument 404 /notfound.php


5. Android致命异常:可以问题,怎么解决

一般在报错信息的后面几行,特别和你应用程序有关的类,可以双击点入进行查看

1. Caused by: java.lang.SecurityException:Permission denied (missing INTERNET permission?)

解释:安全异常---缺少了INTERNET的权限

2.org.json.JSONException: No value for datas

解释:被JSONException捕获的异常:datas这个标签取没有值

3. Caused by: NullPointerException:***

解释:空指针异常

1)可能1:使用对对象没有开辟空间,使用的对象没有new

2)可能2:被引用的对象没有开辟空间,被使用的对象没有new

4. Caused by: OOM(
out of memory)

解释:如果当一次性加载图片的大小超过4MB的时候,会报这样的错误

5.java.lang.ClassCastException:java.lang.String cannot be cast tocom.qianfeng.gridviewfromnet.MainActivity$MyAdapter$ViewHolder

解释:类型转换错误,String不能被转换成MyAdapter里的ViewHolder

6.Caused
by:android.content.ActivityNotFoundException: Unable to find explicit
activityclass{com.qianfeng.day41_gridviewicon/com.qianfeng.day41_gridviewicon.GridViewActivity};have
you declared this activity in your AndroidManifest.xml?

解释:没有去清单文件申明指定的activity

7.java.lang.IllegalStateException:Could
not find a method btnClick(View) in the activity
classcom.qianfeng.day41_dialoglist.MainActivity
for onClick handler on view classandroid.widget.Button with id
'btn_normallist'

解释:是这id:btn_normallist的button没有在代码里找到btnClick(View)

8.android.content.res.Resources$NotFoundException:String resource ID #0x0

解释:资源的地址没有被找到

可能:设置的参数应该是0x....的地址,但实际却被赋值了

9. java.lang.IndexOutOfBoundsException:Invalid index 3, size is 2

解释:数组下标越界

10.android.view.WindowManager$BadTokenException:Unable to add window -- token null is not valid; is your activity running?

解释:你的Activity没有完全的运行起来,却在window窗口去显示popUpMenu

6. Android 全局异常是什么意思

Android系统的“程序异常退出”,给应用的用户体验造成不良影响。为了捕获应用运行时异常并给出友好提示,便可继承UncaughtExceptionHandler类来处理。通过Thread.()方法将异常处理类设置到线程上即可。
1、异常处理类,代码如下:

[java] view plain

public class CrashHandler implements UncaughtExceptionHandler {
public static final String TAG = "CrashHandler";
private static CrashHandler INSTANCE = new CrashHandler();
private Context mContext;
private Thread.UncaughtExceptionHandler mDefaultHandler;

private CrashHandler() {
}

public static CrashHandler getInstance() {
return INSTANCE;
}

public void init(Context ctx) {
mContext = ctx;
mDefaultHandler = Thread.();
Thread.(this);
}

@Override
public void uncaughtException(Thread thread, Throwable ex) {
// if (!handleException(ex) && mDefaultHandler != null) {
// mDefaultHandler.uncaughtException(thread, ex);
// } else {
// android.os.Process.killProcess(android.os.Process.myPid());
// System.exit(10);
// }
System.out.println("uncaughtException");

new Thread() {
@Override
public void run() {
Looper.prepare();
new AlertDialog.Builder(mContext).setTitle("提示").setCancelable(false)
.setMessage("程序崩溃了...").setNeutralButton("我知道了", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
System.exit(0);
}
})
.create().show();
Looper.loop();
}
}.start();
}

/**
* 自定义错误处理,收集错误信息 发送错误报告等操作均在此完成. 开发者可以根据自己的情况来自定义异常处理逻辑
*
* @param ex
* @return true:如果处理了该异常信息;否则返回false
*/
private boolean handleException(Throwable ex) {
if (ex == null) {
return true;
}
// new Handler(Looper.getMainLooper()).post(new Runnable() {
// @Override
// public void run() {
// new AlertDialog.Builder(mContext).setTitle("提示")
// .setMessage("程序崩溃了...").setNeutralButton("我知道了", null)
// .create().show();
// }
// });

return true;
}
}

2、线程绑定异常处理类

[java] view plain

public class CrashHandlerActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
CrashHandler crashHandler = CrashHandler.getInstance();
crashHandler.init(this); //传入参数必须为Activity,否则AlertDialog将不显示。
// 创建错误
throw new NullPointerException();
}
}

7. 如何查看android产生的异常

android程序如果出问题,因为实际是java程序,所以会抛出异常,比如这样。弹出的警告对话框中没有异常信息,如果需要看到日志内容,可执行:adb logcat即可见到异常信息。或者通过ddms,通过device》run logcat通过图形界面查看日志,和上面的命令效果一样。这是一个异常的内容:W/dalvikvm(26121): threadid=3: thread exiting with uncaught exception (group=0x4000fe70) E/AndroidRuntime(26121): Uncaught handler: thread main exiting e to uncaught exception E/AndroidRuntime(26121): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.easymorse.activity/com.easymorse.activity.ActivityTest}: java.lang.SecurityException: Requires READ_PHONE_STATE: Neither user 10032 nor current process has android.permission.READ_PHONE_STATE. E/AndroidRuntime(26121): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2268) E/AndroidRuntime(26121): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2284) E/AndroidRuntime(26121): at android.app.ActivityThread.access$1800(ActivityThread.java:112) E/AndroidRuntime(26121): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1692) E/AndroidRuntime(26121): at android.os.Handler.dispatchMessage(Handler.java:99) E/AndroidRuntime(26121): at android.os.Looper.loop(Looper.java:123) E/AndroidRuntime(26121): at android.app.ActivityThread.main(ActivityThread.java:3948) E/AndroidRuntime(26121): at java.lang.reflect.Method.invokeNative(Native Method) E/AndroidRuntime(26121): at java.lang.reflect.Method.invoke(Method.java:521) E/AndroidRuntime(26121): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:782) E/AndroidRuntime(26121): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:540) E/AndroidRuntime(26121): at dalvik.system.NativeStart.main(Native Method) E/AndroidRuntime(26121): Caused by: java.lang.SecurityException: Requires READ_PHONE_STATE: Neither user 10032 nor current process has android.permission.READ_PHONE_STATE. E/AndroidRuntime(26121): at android.os.Parcel.readException(Parcel.java:1234) E/AndroidRuntime(26121): at android.os.Parcel.readException(Parcel.java:1222) E/AndroidRuntime(26121): at com.android.internal.telephony.IPhoneSubInfo$Stub$Proxy.getLine1Number(IPhoneSubInfo.java:223) E/AndroidRuntime(26121): at android.telephony.TelephonyManager.getLine1Number(TelephonyManager.java:498) E/AndroidRuntime(26121): at com.easymorse.activity.ActivityTest.onCreate(ActivityTest.java:18) E/AndroidRuntime(26121): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1123) E/AndroidRuntime(26121): … 11 more日志引用在android系统中获取imei号和其他手机信息 发送文章为PDF

8. android 开发中常见的异常有哪些,如何处理

1.R.java消失或解析异常

查看res中资源文件,图片,xml等。比如图片文件名不能有大写不能有空格。
搞定错误之后Project->clean就可以了。

2.自定义title栏。
首先要z在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);

3.SQLite isFirst和isBeforeFirst方法的区别:
看下面一段代码
Cursor c = queryTheCursor(type);
if(c.moveToLast())
while (!c.isBeforeFirst()) {
String tmpContent = new String();
tmpContent = c.getString(c.getColumnIndex("content"));
contents.add(tmpContent);
c.moveToPrevious();
}
c.close();
代码的作用是逆序输出表中的内容,第三行如果用的是isFirst()的话就无法输出第一行,正确做发是用isBeforeFirst()。

4.eclipse删除空行
在eclipse中删除某一行就用ctrl+D快捷键。如果你想删除一个文件中的所有空行呢。
可以用下面方法。

1)打开源码编辑器
2)使用快捷键Ctrl+f
3)在Find输入框中输入:^\s*\n
4)Replace With输入框的值为空
5)在【Options】选中的"Regular expressions"
6)点击【Replace All】按钮。

9. android常见的编译时异常有哪些

这个是有可能的,举个例子int x = 10/0;这个就会抛出异常的,因为0是不能作为除数的,这也将导致程序崩溃退出。
因此,在程序中不确定的地方应该多进行if语句的判断,适当加入trycatch语句进行异常的捕获。

10. android开发中常见的异常有哪些

1.R.java消失或解析异常

查看res中资源文件,图片,xml等。比如图片文件名不能有大写不能有空格。
搞定错误之后Project->clean就可以了。

2.自定义title栏。
首先要z在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);

3.SQLite isFirst和isBeforeFirst方法的区别:

热点内容
内置存储卡可以拆吗 发布:2025-05-18 04:16:35 浏览:335
编译原理课时设置 发布:2025-05-18 04:13:28 浏览:378
linux中进入ip地址服务器 发布:2025-05-18 04:11:21 浏览:612
java用什么软件写 发布:2025-05-18 03:56:19 浏览:32
linux配置vim编译c 发布:2025-05-18 03:55:07 浏览:107
砸百鬼脚本 发布:2025-05-18 03:53:34 浏览:943
安卓手机如何拍视频和苹果一样 发布:2025-05-18 03:40:47 浏览:739
为什么安卓手机连不上苹果7热点 发布:2025-05-18 03:40:13 浏览:803
网卡访问 发布:2025-05-18 03:35:04 浏览:510
接收和发送服务器地址 发布:2025-05-18 03:33:48 浏览:371