引入的开源控件在xml界面无法预览:the following classes could not be instantiated

关于the following classes could not be instantiated出现的问题,以及常见的解决方法,网上已经有很多资源。
而我的情况稍微有点不一样:
导致报错的根本原因在于自己在从svn更新的时候,把build.gradle文件给更新了。

我的情况:

  • AndroidStudio版本2.2.2 (一直没有升级,最新的为2.3.3)
  • 一次失误:在从svn更新代码的时候,把build.gradle更新覆盖了,导致自己的
    build.gradle中 classpath的gradle版本从2.2.0被改成了2.3.3
    dependencies {
        classpath 'com.android.tools.build:gradle:2.3.3'
    }

导致问题:

  • 项目用到过一个刷新控件PullToRepfresh,在我svn更新之前显示都是正常的
引入的开源控件在xml界面无法预览:the following classes could not be instantiated_第1张图片
  • 而svn更新后,项目可以运行,但xml界面会无法显示预览并报以下错误
    大概意思就是:
    这个引入的刷新类无法实例化;加一个isInEditMode()来忽略跳过这个提示;以及报空指针
    (截图找不到了,无法复现)
The following classes could not be instantiated:eu.erikw.PullToRefreshListView (Open Class, Show Error Log)
Tip: Use View.isInEditMode() in your custom views to skip code when shown in 

java.lang.NullPointerException
    at eu.erikw.PullToRefreshListView.init(PullToRefreshListView.java:229)
    at eu.erikw.PullToRefreshListView.(PullToRefreshListView.java:100)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(    at sun.reflect.NativeConstructorAccessorImpl.newInstance(    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(    at java.lang.reflect.Constructor.newInstance(    at com.android.ide.eclipse.adt.internal.editors.layout.ProjectCallback.instantiateClass(ProjectCallback.java:437)
    at com.android.ide.eclipse.adt.internal.editors.layout.ProjectCallback.loadView(ProjectCallback.java:189)
    at android.view.BridgeInflater.loadCustomView(BridgeInflater.java:207)
    at android.view.BridgeInflater.createViewFromTag(BridgeInflater.java:135)
    at android.view.LayoutInflater.rInflate_Original(LayoutInflater.java:755)
    at android.view.LayoutInflater_Delegate.rInflate(LayoutInflater_Delegate.java:64)
    at android.view.LayoutInflater.rInflate(LayoutInflater.java:727)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:492)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:373)

解决:

自己花了一下午无功而返,最后在组长GaoQing的帮助下才准确定位到问题,感谢~

一种是把gradle改为自己安装的版本,我的是2.2.0,改动并重新build project即可

    dependencies {
        classpath 'com.android.tools.build:gradle:2.2.0'
    }

另一种是升级AndroidStudio至最新版本(2017.6 最新的是2.3.3),期间或许会有提示,即自动帮你把gradle改为最新的,允许即可

    dependencies {
        classpath 'com.android.tools.build:gradle:2.3.3'
    }

总结:

  • 每个人的AndroidStudio版本不同,那么一般开发过程中,都应该避免提交自己的build.gradle文件,避免一些不必要的文件冲突、未知错误
  • 因此需要保持build.gradle中自己的gradle版本与机器安装的AndroidStudio版本一致
  • 对于gradle版本,高的可以兼容低的,低的无法兼容高的。会报类空指针的错误,但仍然不会影响程序安装和运行,只是造成xml界面无法预览

你可能感兴趣的:(引入的开源控件在xml界面无法预览:the following classes could not be instantiated)