
java.lang.NullPointerExceptionat com.Google.androID.gms.common.GooglePlayServicesUtil.zzh(UnkNown Source)at com.Google.androID.gms.common.GooglePlayServicesUtil.zzd(UnkNown Source)at com.Google.androID.gms.common.GoogleAPIAvailability.isGooglePlayServicesAvailable(UnkNown Source)at com.Google.androID.gms.common.API.zzg$zze.zznn(UnkNown Source)at com.Google.androID.gms.common.API.zzg$zzi.run(UnkNown Source)at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)at java.util.concurrent.FutureTask.run(FutureTask.java:266)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)at java.lang.Thread.run(Thread.java:745)Process finished with exit code 255
似乎没有调用Shadow类,调用GooglePlayServicesUtil给出NullPointerException.有没有人见过这个?
我甚至不在测试中使用Google Play服务.
解决方法 我添加了下一个解决方法,它工作正常:>将所有PlayServices的相关代码解压缩到Utility类(在我的例子中,它只是可用性检查):
public class PlayServicesUtils { private static final int PLAY_SERVICES_RESolUTION_REQUEST = 9000; public static final int AVAILABLE = 1; public static final int ERROR_RESolVABLE = 2; public static final int ERROR_UNRESolVABLE = 3; @IntDef({AVAILABLE,ERROR_RESolVABLE,ERROR_UNRESolVABLE}) @Retention(RetentionPolicy.soURCE) public @interface PlayServicesAvailability { } @PlayServicesAvailability public static int checkPlayServices(@NonNull Activity activity) { GoogleAPIAvailability APIAvailability = GoogleAPIAvailability.getInstance(); int resultCode = APIAvailability.isGooglePlayServicesAvailable(activity); if (resultCode != ConnectionResult.SUCCESS) { if (APIAvailability.isUserResolvableError(resultCode)) { APIAvailability.getErrorDialog(activity,resultCode,PLAY_SERVICES_RESolUTION_REQUEST).show(); return PlayServicesUtils.ERROR_RESolVABLE; } else { CLog.e(Constants.TAG,"This device does not support Google Play services."); return PlayServicesUtils.ERROR_UNRESolVABLE; } } return PlayServicesUtils.AVAILABLE; }} >为此Utility类实现阴影:
@Implements(PlayServicesUtils.class)public class ShadowPlayServicesUtils { @Implementation @PlayServicesUtils.PlayServicesAvailability public static int checkPlayServices(@NonNull Activity activity) { return PlayServicesUtils.AVAILABLE; }} >为您的测试类(或基类测试类)添加阴影:
@Ignore@RunWith(TestRunner.class)@Config( sdk = 18,constants = BuildConfig.class,shadows = { ShadowPlayServicesUtils.class })public abstract class BaseTest { // some code,maybe } >将您的影子添加到TestRunner的InstrumentationConfiguration创建中:
public class TestRunner extends RobolectricGradleTestRunner { public TestRunner(Class<?> klass) throws InitializationError { super(klass); } @OverrIDe public InstrumentationConfiguration createClassLoaderConfig() { InstrumentationConfiguration.Builder builder = InstrumentationConfiguration.newBuilder(); builder.addInstrumentedClass(PlayServicesUtils.class.getname()); return builder.build(); }} 原始答案:
我在Robolectric问题跟踪器上找到了similar issue,并在那里提供了解决方法 – 工作!
只需强制成功初始化Google Play服务:
@Before public voID setUp() { // force success every time ShadowGooglePlayServicesUtil.setIsGooglePlayServicesAvailable(ConnectionResult.SUCCESS);} 编辑:
但是还有另一个issue Play Services 8.3和8.4.这个问题仍然没有解决.
总结以上是内存溢出为你收集整理的android – Robolectric与新版Google Play服务的问题全部内容,希望文章能够帮你解决android – Robolectric与新版Google Play服务的问题所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)