Android开发中的BUG列表

作者: Diffey | 来源:发表于2016-01-04 11:58 被阅读2988次

1.java.lang.NoSuchMethodError: android.content.res.Resources.getDrawable
或者 java.lang.NoSuchMethodError:android.content.Context.getDrawable

原因:Context类的getDrawable(res)方法和Resources的getDrawable(res,theme)都是API21才添加的,低版本系统无法找到该方法所以报异常。

解决办法:
使用Resources的getDrawable(res),但是该方法在API22已废弃。
使用ContextCompat.getDrawable(context,res)。

2.java.lang.IllegalStateException: The content of the adapter has changed but ListView did not receive a notification. Make sure the content of your adapter is not modified from a background thread, but only from the UI thread.

原因:该异常在ListView的layoutChildren()方法中抛出,代码如下:
<code>
if (mItemCount == 0) {
resetList();
invokeOnItemScrollListener();
return;
} else if (mItemCount != mAdapter.getCount()) {
throw new IllegalStateException("The content of the adapter has changed but " + "ListView did not receive a notification. Make sure the content of " + "your adapter is not modified from a background thread, but only from " + "the UI thread. Make sure your adapter calls notifyDataSetChanged() " + "when its content changes. [in ListView(" + getId() + ", " + getClass() + ") with Adapter(" + mAdapter.getClass() + ")]");
}
</code>
即当Adapter的数据改变时,却未及时通知到ListView就会抛出这个异常。一种是Adapter的数据改变了却没有调用notifyDataSetChanged(),一种是改变Adapter数据在其它线程,调用notifyDataSetChanged()在主线程,之间有延迟。

解决办法:
确保改变数据完立即通知ListView。
如果Adapter的数据处理在其它线程,那就让Adapter持有一份数据,其它线程处理完数据后用Handler发通知,在UI线程中改变Adapter的数据和通知ListView。

3.UnsupportedMethodException
Unsupported method:InstantRun.getRestartDexFile().The version of Gradle you connect to does not support that method.

原因:Android Studio的版本和Gradle版本不兼容。
解决办法:升级AS或者更改Gradle的版本。

4.java.lang.NoSuchMethodError: android.graphics.drawable.Drawable.getAlpha

原因:Drawable.getAlpha是API 19才添加的。
Drawable.setAlpha是API 1就可以用,这种不对称真是坑啊。
注意View.setAlpha和View.getAlpha都是API 11添加的。

相关文章

网友评论

  • 随浪:谢谢楼主,第一点,我可以转载么?
    BlueDream_3317:Process: liqian.myapplication, PID: 6034 java.lang.NoSuchMethodError: No static method getDrawable(Landroid/content/Context;I)Landroid/graphics/drawable/Drawable; in class Landroid/support/v4/content/ContextCompat; or its super classes (declaration of 'android.support.v4.content.ContextCompat' appears in /data/app/liqian.myapplication-2/base.apk)atandroid.support.v7.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.java:202)
    at android.support.v7.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.java:190)
    at android.support.v7.widget.AppCompatDrawableManager.checkVectorDrawableSetup(AppCompatDrawableManager.java:711)
    at android.support.v7.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.java:195)
    at android.support.v7.widget.TintTypedArray.getDrawableIfKnown(TintTypedArray.java:81)
    at android.support.v7.app.AppCompatDelegateImplBase.<init>(AppCompatDelegateImplBase.java:131)
    at android.support.v7.app.AppCompatDelegateImplV9.<init>(AppCompatDelegateImplV9.java:155)
    at android.support.v7.app.AppCompatDelegateImplV11.<init>(AppCompatDelegateImplV11.java:31)
    at android.support.v7.app.AppCompatDelegateImplV14.<init>(AppCompatDelegateImplV14.java:55)
    at android.support.v7.app.AppCompatDelegateImplV23.<init>(AppCompatDelegateImplV23.java:33)
    at android.support.v7.app.AppCompatDelegateImplN.<init>(AppCompatDelegateImplN.java:33)
    at android.support.v7.app.AppCompatDelegate.create(AppCompatDelegate.java:201)
    at android.support.v7.app.AppCompatDelegate.create(AppCompatDelegate.java:185)
    随浪: @Diffey 好的,谢谢
    Diffey:@随浪 可以
  • QianqianLis:找了好多地方。。终于找到可以用的了~~!!! :+1:

本文标题:Android开发中的BUG列表

本文链接:https://www.haomeiwen.com/subject/lwfahttx.html