android系统
问题描述:
使用Lambda表达式当我使用拉姆达这个样子报告android系统
无法解析法的getAction()
代码
BroadcastReceiver refreshDataReceiver = (context,intent)-> {
if (AppConstants.REFRESH_DATA_ACTION.equals(intent.getAction())) {
taskInfos.clear();
taskInfos.addAll(mTaskDao.queryMyTasks());
mAdapter.notifyDataSetChanged();
}
};
虽然我在正常编写代码方式,它运作良好,为什么?
BroadcastReceiver refreshDataReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if (AppConstants.REFRESH_DATA_ACTION.equals(intent
.getAction())) {
taskInfos.clear();
taskInfos.addAll(mTaskDao.queryMyTasks());
mAdapter.notifyDataSetChanged();
}
}
};
答
添加Retrolambda到您的摇篮构建配置
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:1.4.0'
classpath 'me.tatarka:gradle-retrolambda:3.2.0'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
添加源和目标兼容到Java 8并应用新的插件在您的应用程序/文件的build.gradle。
apply plugin: 'com.android.application'
apply plugin: 'me.tatarka.retrolambda'
android {
compileSdkVersion 22
buildToolsVersion "23.0.0 rc2"
defaultConfig {
applicationId "com.vogella.android.retrolambda"
minSdkVersion 22
targetSdkVersion 22
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
}
然后使用lambda表达式。 link
答
BroadcastReceiver
不是lambda替换的有效候选者。 Lambdas只能替换单个方法接口。从Java Lambda Quickstart docs -
Lambda表达式是包含在Java SE 8中的新的和重要的特点,他们提供了一个简洁明了的方式使用表达式来表示一个方法接口。
BroadcastReceiver
既不是界面,也不是只有一种方法。
+0
谢谢!这真是一个愚蠢的错误... – Ryan
您使用的是什么版本的Java。请参阅:http://*.com/questions/23318109/is-it-possible-to-use-java-8-for-android-development –
Java 8 bt_opt.setOnClickListener((v) - > { 意图意图=新的Intent(getActivity(),MyTaskMapActivity.class); intent.putParcelableArrayListExtra(“tasks”,(ArrayList )taskInfos); getActivity()。startActivity(intent); }); – Ryan