2017-08-29 87 views
3

它可能是Question1Question2重复,但对我来说它仍然不清楚。 他们说,只用19 api支持的资源尝试,但其参考that question其不是。试用资源API前19

我已经用我自己的Realm进行了测试。

boolean isClosed = RealmManager.isClosed(); //false here 
try (Realm realm = RealmManager.getRealm()) { 
    realm.executeTransaction(r -> r.where(User.class).findAll()); 
} catch (Exception ex) { 
    ex.printStackTrace(); 
} 
isClosed = RealmManager.isClosed(); //true here 

public static boolean isClosed() { 
    return realm == null || realm.isClosed(); 
} 

它的工作正常22阿皮(真正的手机)和16阿皮(模拟器)。 那么这个区块在大多数手机的19 api前都能正常工作,哪里是真相?我使用Retrolabmda

摇篮配置:

compileOptions { 
     sourceCompatibility JavaVersion.VERSION_1_8 
     targetCompatibility JavaVersion.VERSION_1_8 
    } 

回答

1

可以使用尝试,与资源使用过Android Studio 3.0,在所有API级别

过Android Studio 3.0预览版1和更高扩展support for try-with-resources所有Android API级别

此外,您还需要标注@SuppressLint("NewApi")如果你建立你的API级别< 19.应用程序添加到代码块隐藏警告在这种annotation is not applicable的情况下,但是,可以忽略警告,构建即使运行应用程序试用资源代码块突出显示为错误。

+0

是的,我知道。但现在我使用2.3.3 AS,它仍然有效。 – TooLazy

+0

但AS版本<3.0中的API级别<19不支持_try-with-resources_。解决方案不重要:升级AS或不使用_try-with-resources_ :) – Sergey

+0

您是否阅读我的问题?)它确实在19 api以前工作,即使它不支持,因为你说) – TooLazy