Android 异常解决方法【汇总】
(1)异常:Android中引入第三方Jar包的方法(Java.lang.NoClassDefFoundError解决办法)
1、在工程下新建lib文件夹,将需要的第三方包拷贝进来。2、将引用的第三方包,添加进工作的build path。选中jar包->Build Path
3、(关键的一步)将lib设为源文件夹。如果不设置,则程序编译可以通过,但运行的时候,会报:选中lib文件夹->source code java.lang.NoClassDefFoundError Android中引入第三方Jar包的方法(java.lang.NoClassDefFoundError解决办法) (2)异常:Caused by: android.os.TransactionTooLargeException 导致原因是:Binder传输的数据太大 如果Binder的参数或返回值太大,不适合的事务缓冲区,然后调用将失败,并将被抛出TransactionTooLargeException。 解决方法: 不要将大量数据传入Binder (3)异常:android.database.CursorWindowAllocationException:Cursor window allocation of 2048 kb failed 导致原因:主要原因是因为使用了SimpleCursorAdapter类,其中的Cursor参数需要我们手动关闭,否则就会出现以上异常。 解决方法:cursor.close() (4)异常:Excessive JNI global references错误的解决方案 GREF暴增 导致原因:vm对jni层的reference有个数限制,过多很造成VM aborting。因此每次在GREF增加到2000以上的时候就直接aborting了 解决方法:及时回收或关闭引用 (5)异常:android.view.WindowManager$BadTokenException: Unable to add window -- token 导致原因:使用getApplicationContext()获得的Context,而必须使用Activity,因为只有一个Activity才能添加一个窗体。 解决方法:采用当前Activity的Context (6)异常:android.database.sqlite.SQLiteCantOpenDatabaseException: unable to open database file 导致原因:重复安装软件,导致Sqlite3打开数据库异常 解决方法:卸载相应软件,开关机,重新安装该软件,即可以解决相关异常。 (7)异常:java.lang.NullPointerException 异常原因:使用fragment时,fragment相关布局,必须给每个view设置id,否则通过activity获得fragment的实例时会出现以上异常 解决方法:为fragment布局的每个view设置ID (8)异常:java.util.ConcurrentModificationException(并发操作异常) 异常原因:ArrayList是非线程安全的,当同时在遍历和修改ArrayList时,就会出现该异常 解决方法:使用Vector替换ArrayList,Vector是线程安全的。Vector的缺点:大量数据操作时,由于线程安全,性能比ArrayList低 (9)异常:so库文件异常(JNI层异常) 异常原因:在Android应用层开发中,我们经常会使用so库文件。当so库文件发生异常时,我们只能在adb log中发现fatal libc这样的异常信息,仅此而已,并不能发现异常调用的逻辑关系, 这是我们就需要查看so 库异常Log信息。在Android手机的/data/tombstones 的路径下就包含了so库文件发生异常的Log信息,开发者可以查看该路径下载Log文件发现异常调用的逻辑关系。 (10) 异常:android.os.deadObjectException异常 deadObjectException异常,说明应用的service已经停止,要么是从操作系统中丧生,要么从应用程序中终止。
(11)java.lang.IllegalStateException: commit already called
这个错误是我学习最基础的fragment的错误。
注意原因就是:
因为你的FragmentTransaction事务是全局的变量,所以只能commit一次。
所以我们要两个局部FragmentTransaction事务去做commit即可。
做一下笔记,希望下次有小伙伴遇到这样的可以帮忙解决。
APP全局异常捕获,并保存本地文件 http://www.cnblogs.com/androidsj/p/4851338.html
安卓5.0正常运行,5.0以下NoClassDefFoundError
http://blog.csdn.net/run_forrest_run/article/details/51939957
// 解决方法就是在项目的Application类中加入了以下代码:
@Override
protected void attachBaseContext(Context base) {super.attachBaseContext(base); MultiDex.install(this);
}
AAPT err(Facade for 157667509): libpng error: Not a PNG file
错误,提示信息显示图片非PNG格式。
解决方法:
在studio中依次点开每个后缀名为png的图片,
即使图片的后缀名是png,这里会显示真正的格式。找到不符合要求的图片,另存为png格式即可。
Caused by: java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.
当在AndroidManifest.xml文件的application的节点设置了属性:
android:theme="@android:style/Theme.NoTitleBar
而Activity继承了ActionBarActivity就回出现上述错误,解决的办法就是让Activity去继承Activity而不是ActionBarActivity
【ArithmeticException】产生该错误的原因是没有对0进行考虑,因为在进行一些算数运算的时候除数是不可为0的,此时就该用条件语句判断一下除数是否为0,否则就会抛出该异常。
【IllegalArgumentException】此异常表明向方法传递了一个不合法或不正确的参数。 看看传值的方法是否参数不正确。
【java.lang.VerifyError错误】jar包的问题,可能是自己不小心拖动了jar包 导致重复了后来再classpath里面添加了个用到的包,删除了多余的jar包。
【android.view.WindowManager$BadTokenException】Unable to add window — token null 无法添加窗口
new AlertDialog.Builder(mcontext) .setIcon(android.R.drawable.ic_dialog_alert) .setTitle("Warnning") .setMessage( "You forget to write the message. Do you want to fill out it ??") .setPositiveButton("Yes", positiveListener).setNegativeButton( "No", negativeListener).create().show();
导致报这个错是在于new AlertDialog.Builder(mcontext),虽然这里的参数是AlertDialog.Builder(Context context)但我们不能使用getApplicationContext()获得的Context,而必须使用Activity,因为只有一个Activity才能添加一个窗体。
解决方法:将new AlertDialog.Builder(Context context)中的参数用Activity.this(Activity是你的Activity的名称)来填充就可以正确的创建一个Dialog了。
new AlertDialog.Builder(MyActivity.this) .setIcon(android.R.drawable.ic_dialog_alert) .setTitle("Warnning") .setMessage( "You forget to write the message. Do you want to fill out it ??") .setPositiveButton("Yes", positiveListener).setNegativeButton( "No", negativeListener).create().show(); 【 @TargetApi(Build.VERSION_CODES.HONEYCOMB) 】
指使用该注解的方法适用于 系统版本 为3.0及以上系统的手机。
[Android Pro] java.lang.IllegalStateException: Fragment(XXFragment) not attached to Activity异常
1、关于Fragment(XXFragment) not attached to Activity 异常。出现该异常,是因为Fragment的还没有Attach到Activity时,调用了如getResource()等,需要上下文Content的函数。解决方法,就是等将调用的代码写在OnStart()中。网上还有几处这样的参考:http://stackoverflow.com/questions/10919240/fragment-myfragment-not-attached-to-activity 回答的主要是在调用
之前增加一个判断isAdded(),两外说这个异常解决办法的有http://stackoverflow.com/questions/6870325/android-compatibility-package-fragment-not-attached-to-activity
这个是针对另外一种情况下的解决方式。
2、在使用Fragment保存参数的时候,可能是因为需要保存的参数比较大或者比较多,这种情况下页会引起异常。比如代码
Bundle b = new Bundle();
b.putParcelable("bitmap", bitmap2);
imageRecognitionFragment.setArguments(b);
Bundle b = new Bundle();
b.putParcelable("bitmap", bitmap2);
imageRecognitionFragment.setArguments(b); 设置好参数,并且添加hide(),add(),方法之后,需要commit(),来实现两个Fragment跳转的时候,这种情形下参数需要进行系统保存,但是这个时候你已经实现了跳转,系统参数却没有保存。此时就会报
java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState 异常。分析原因:你并不需要系统保存的参数,只要你自己设置的参数能够传递过去,在另外一个Fragment里能够顺利接受就行了,现在android里提供了另外一种形式的提交方式commitAllowingStateLoss(),从名字上就能看出,这种提交是允许状态值丢失的。到此问题得到完美解决,值的传递是你自己控制的。 这里也说一下另外一个问题,bitmap 也可以通过Bundle传递的,使用putParacelable就可以了.
android.view.WindowManager$BadTokenException
这里主要说的是你的android里一个Activity发生窗体泄漏了,也就是我们常说的内存泄漏,为什么窗体会泄漏,主要是你的打开一个PopupWindow(窗体)时,如图。它没有关闭PopupWindow(窗体),就退出这个Activity,就会发生这个错误,因为这里就有一个顺序,你要先关闭PopupWindow,再关闭Activity,这个一定的,PopupWindow(窗体)不能独立存在。
明白这个,你就容易解决了,你先用(dismiss)关闭就行,在你的窗体需要关闭时,加上这句:(PopupWindow.dismiss;)PopupWindow这个是你项目里你窗体的名字。最好做一个判断,判断窗体是否为空,如果不为空就关闭,不然有时空也关闭也会出错。
“NetworkOnMainThreadException”出错提示的原因及解决办法
在低版本的API上都可以运行的,但在3.0以上的版本就会出现NetworkOnMainThreadException
出现android.os.NetworkOnMainThreadException错误提示的原因
原因:不允许在主线程中进行网络访问
解决办法:将网络访问的操作单独放到一个线程中,代码如下:
new Thread(){@Overridepublic void run(){//把网络访问的代码放在这里
}
}.start();
最常见的八种Android报错及快速解决方法
http://jingyan.baidu.com/article/1612d5006546d1e20e1eeefa.html
转载于:https://www.cnblogs.com/androidsj/p/4383620.html
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
