Articles of java 8

RxJava重试重新订阅传播时

我在Android应用程序中使用Retrofit与RxJava进行通信,并且必须处理从似乎正常的HTTP响应(状态200代码)解析响应时出错。 我还使用retryWhen运算符实现了一种处理错误的方法,该运算符连接到用户的输入以决定是否重试。 这通过重新订阅原始Observable 。 我尝试的第一种方法是这样的: services.getSomething() .map(response -> { if (checkBadResponse(response)) { throw new RuntimeException(“Error on service”); } else { return parseResponse(response); } }).retryWhen(this::shouldRetry); 有了这个,服务不会再被调用。 看来retryWhen运算符无法重新订阅服务的Observable 。 最终工作的是实施另一个运营商,该运营商不发送onCompleted向前并使用lift ,如下所示: public class CheckResponseStatus implements Observable.Operator<ResponsePayload, ResponsePayload> { @Override public Subscriber<? super ResponsePayload> call(Subscriber<? super ResponsePayload> subscriber) { return new Subscriber<ResponsePayload>() { private boolean hasError = false; […]

Gradle with java 8 for retrolambda – Android无法find注释TargetApi

我试图让retrolambda与gradle一起使用Android构建。 对java 8的更改导致了android注释的一些问题。 我从这些post中尝试了几乎所有内容:(在阅读所有这些链接之前更新3) http://code.google.com/p/android/issues/detail?id=55764 https://bitbucket.org/hvisser/android-apt AndroidAnnotations Nothing Generated,Empty Activity Android studio + Gradle + Android Annotations 如何使用Google Android Gradle Plugin编译AndroidAnnotations? 但我一直得到这些错误: Gradle:错误:包android.annotation不存在 Gradle:错误:找不到符号类TargetApi 那些gradle警告: Gradle ::支持处理器’com.googlecode.androidannotations.AndroidAnnotationProcessor’支持的源版本’RELEASE_6’小于-source’1.8′ Gradle ::任何处理器都无法识别以下选项:'[androidManifestFile]’ 这是我的build.gradle文件,使用https://stackoverflow.com/a/16802216/860488 (链接3最热门的解决方案): buildscript { repositories { mavenCentral() maven { url ‘http://download.crashlytics.com/maven’ } } dependencies { classpath ‘com.android.tools.build:gradle:0.7.+’ classpath ‘com.google.guava:guava:14.0.1’ classpath ‘com.crashlytics.tools.gradle:crashlytics-gradle:1.+’ classpath ‘me.tatarka:gradle-retrolambda:1.1.1’ } } repositories […]

为什么Java 8 Streams只能从API级别24获得?

支持的Java 8语言function和API声明我们可以在任何min sdk API级别的android项目中使用默认方法和lambdaexpression式。 但是,Stream库(java.util.stream)仅支持API 24及更高版本。 有人可以说明为什么会这样吗? 对我来说它没有意义,因为据我所知,添加流API不需要JVM修改,不像添加lambdas或默认方法; 它只是简单地利用集合上的默认方法等Java 8特性,并为java util库添加了一些新代码?

我无法在AndroidStudio中设置JDK 1.8

我已经下载并安装了jdk 1.8,但是当我尝试在ProjectStructure中设置jdk 1.8的路径 – > JDK Location时,AndroidStudio忽略它,所以在设置路径之后 单击确定并重新打开窗口“ProjectStructure”我再次看到jdk 1.7

Android Studio无法使用安全连接进行更新,抱怨使用Java 6

在Android Studio的Preferences – > Appearance & Behavior – > System Settings – > Updates ,我尝试启用Use secure connection选项: 但是,当我单击“ Apply按钮时,出现错误”Secure connection is not supported on Java 6″ : 我检查了Project Structure的JDK位置设置,它是/Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home : 似乎我使用的是Java 7,而不是Java 6.那么为什么安全连接设置会抱怨Java 6不支持? 如果需要,下面是我机器上安装的JDK: 第一个1.6.0.jdk来自Apple ,另外三个来自Oracle。

Android Studio 3.0编译时错误

将Android Studio 2.3.1升级到3.0 Canary2 ,我的项目无法正常运行。我已经阅读了迁移文件 。首先它显示了Gradle Build Success,然后它显示了很多错误编译时间。这是我的Gradle文件和错误输出。任何帮助将不胜感激。 项目的Gradle文件 // Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { repositories { maven { url ‘https://maven.google.com’ } maven { url ‘https://maven.fabric.io/public’ } jcenter() } dependencies { classpath ‘com.android.tools.build:gradle:3.0.0-alpha2’ classpath ‘io.fabric.tools:gradle:1.22.1’ classpath ‘com.jfrog.bintray.gradle:gradle-bintray-plugin:1.6’ // NOTE: Do not place your application dependencies […]

带有默认方法的Java 8接口启用Jacoco时无效的方法

我们有一个带有默认方法的接口,我们在Java和Kotlin类中实现了该接口,并且我们提供了非默认方法的实现。 当我们在调试模式(没有testCoverageEnabled = true)运行时,应用程序按预期工作。 但是当我们使用testCoverageEnabled = true运行不同的配置时,应用程序崩溃并出现以下错误 java.lang.NoSuchMethodError: No static method $$triggerInterfaceInit()V in class Lcom/ui/viewholders/CAViewContract$$CC; or its super classes (declaration of ‘ui.viewholders.CAViewContract$$CC’ appears in /data/app/SMCXbiLYvHb1Kk08Kee__g==/base.apk) at home.c.CCFragment.(Unknown Source:0) at home.HomePageCardProvider.getFragment(HomePageCardProvider.java:17) at home.HomeFragment.handleCardFragment(HomeFragment.java:172) 注意: 1。JaCoCo版本:“0.8.0”2。操作系统:Android with minSdk 21 如果我们将minSdk更改为24,并且testCoverageEnabled = true本身,则它正在工作。 我们无法弄清楚确切的问题。

使用gradle-retrolambda和Lightweight-Stream-API过滤Android中的对象列表

我试图在我的Android应用程序中过滤Java中的对象列表,为此我遵循了这个答案 (Java 8建议),但由于Android SDK中不支持Lambdas ,我使用了gradle-retrolambda,但我得到了这个运行时 -错误 java.lang.NoSuchMethodError: No interface method stream()Ljava/util/stream/Stream; in class Ljava/util/List; or its super classes (declaration of ‘java.util.List’ appears in /system/framework/core-libart.jar) 这是我正在使用的代码行: List closedCaseDetailsList = caseDetailsList.stream().filter(item -> item.caseClosed.equals(true)).collect(Collectors.toList()); 我相信它应该工作,因为gradle-retrolambda应该在Java7上处理Lambdas。 接下来,根据Lightweight-Stream-API的用法,我尝试了Lightweight-Stream-API以及gradle-retrolambda并稍微改变了我的代码 List closedCaseDetailsList = Stream.of(caseDetailsList).filter(item -> item.caseClosed.equals(true)).collect(Collectors.toList()); 但它给我一个错误,比Collectors.toList()说 collect (com.annimon.stream.Collector) in Stream cannot be applied to (java.util.stream.Collector<T,capture,java.util.List>) 我也试过显式地将Streamtypes转换为List但这当然没有用。 我尝试了Slack社区,SO聊天室,但找不到解决方案。 我发现问题最接近的是这个问题,但这是一个不同的错误。 谢谢

Android Studio Instant在Android中使用java 8无法运行

使用java 8进行简洁的Lambdaexpression式等但缺点是即时运行不起作用。 buildToolsVersion “23.0.3” compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } 如何使用java 8function启用即时运行

升级到Java 8后,Gradle构建将永远存在

我尝试在Android Studio中启用Java 8function,如https://android.com中所示 : defaultConfig { … jackOptions { enabled true } } compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } 之后我添加了compile ‘net.sourceforge.streamsupport:streamsupport:1.5.1’并且能够使用lambdas。 自从我完成了这项工作以来,Gradle构建需要永远(我在20分钟后尝试其他解决方案就杀了这个过程)。 我的硬件不是很好,但仍然不是一个可接受的构建时间(它永远不会完成)。 我也试图删除这些更改,但我面临相关的编译错误。 我可以从git中提取以前的应用程序版本,但我宁愿解决这些问题以便能够使用Java 8的function。 有没有人面对这个问题并设法解决它? 谢谢。