用https://github.com/mooncafes/BarcodeScanner提供的BarcodeScanner在android studio1.3.2环境下做为依赖module进行二维码扫描开发,做了一个简单的测试代码测试调用BarcodeScanner的二维码扫描功能,编译时common下的Runnable类报错,信息如下:
Error:(19, 8) 错误: 无法将类 AsyncTask<Params,Progress,Result>中的方法 executeOnExecutor应用到给定类型;
需要: Executor,CAP#1[]
找到: Executor
原因: 形式 varargs 元素类型CAP#1无法从 类 Runnable 进行访问
其中, Params,Progress,Result是类型变量:
Params扩展已在类 AsyncTask中声明的Object
Progress扩展已在类 AsyncTask中声明的Object
Result扩展已在类 AsyncTask中声明的Object
其中, CAP#1是新类型变量:
CAP#1从?的捕获扩展Object
Error:(22, 8) 错误: 无法将类 AsyncTask<Params,Progress,Result>中的方法 execute应用到给定类型;
需要: CAP#1[]
找到: 没有参数
原因: 形式 varargs 元素类型CAP#1无法从 类 Runnable 进行访问
其中, Params,Progress,Result是类型变量:
Params扩展已在类 AsyncTask中声明的Object
Progress扩展已在类 AsyncTask中声明的Object
Result扩展已在类 AsyncTask中声明的Object
其中, CAP#1是新类型变量:
CAP#1从?的捕获扩展Object
注: 某些输入文件使用或覆盖了已过时的 API。
注: 有关详细信息, 请使用 -Xlint:deprecation 重新编译。
注: 某些消息已经过简化; 请使用 -Xdiags:verbose 重新编译以获得完整输出
2 个错误
Error:Execution failed for task ':BarcodeScanner:compileDebugJava'.
> Compilation failed; see the compiler error output for details.
Runnable类的源码如下
import android.annotation.SuppressLint;
import android.os.AsyncTask;
import android.os.Build;
/**
* 兼容低版本的子线程开启任务
*
* @author hugo
*
*/
public class Runnable {
@SuppressLint("NewApi")
@SuppressWarnings("unchecked")
public static void execAsync(AsyncTask<?, ?, ?> task) {
if (Build.VERSION.SDK_INT >= 11) {
task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
}
else {
task.execute();
}
}
}
测试代码如下:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
scanButton = (Button) findViewById(R.id.scan);
showView = (TextView) findViewById(R.id.show);
scanButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent startScan = new Intent(MainActivity.this, CaptureActivity.class);
//startActivity(startScan);
startActivityForResult(startScan, 0);
}
});
}
该测试在eclipse下没问题,只是在android studio1.3.2有此问题,烦请各位赐教!
------解决思路----------------------
两种解决办法:
1.如果是java8,请降低版本
2.task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR)改为
task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR,null)