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(); 
     } 
    } 
}; 
+0

您使用的是什么版本的Java。请参阅:http://*.com/questions/23318109/is-it-possible-to-use-java-8-for-android-development –

+0

Java 8 bt_opt.setOnClickListener((v) - > { 意图意图=新的Intent(getActivity(),MyTaskMapActivity.class); intent.putParcelableArrayListExtra(“tasks”,(ArrayList )taskInfos); getActivity()。startActivity(intent); }); – Ryan

添加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