我想在Kotlin
Android项目中使用Java
Android库(FotoApparat)。
在Kotlin代码库中,whenAvailble
函数将kotlin回调作为参数获取,将在异步操作完成时调用。
val photoResult = fotoapparat.takePicture()
// Asynchronously saves photo to file
photoResult.saveToFile(someFile)
// Asynchronously converts photo to bitmap and returns the result on the main thread
photoResult
.toBitmap()
.whenAvailable { bitmapPhoto ->
val imageView = (ImageView) findViewById(R.id.result)
imageView.setImageBitmap(bitmapPhoto.bitmap)
imageView.setRotation(-bitmapPhoto.rotationDegrees)
}
可以找到 whenAvailable
代码here
等效的java实现将是:(以前该库是用java编写的)
fotoApparat.takePicture().
toPendingResult().
whenAvailable( /* some sort of call back */);
如何从Java代码提供whenAvailable
回调?
在以前的lib版本中,有一个Java挂起的结果回调类,它不再可用。
答案 0 :(得分:4)
Abreslav said:
单位是一种类型(与虚空不同)并且具有一个值(与Void不同)。这样就可以在通用类中统一处理Unit。即我们不需要另外两种类型:返回某些东西的函数和返回void的函数。它只是一种类型:返回某些东西的函数可能是单位。
介绍void会在类型推断,任何类型函数的组合等等方面带来许多问题
因此,与Kotlin不同,在Java中,您需要明确地返回此值。
你的lambda必须是:
fotoApparat.takePicture().
toPendingResult().
whenAvailable(bitmapPhoto -> {
ImageView imageView = (ImageView) findViewById(R.id.result);
return Unit.INSTANCE;
});
答案 1 :(得分:0)
是的,您可以使用以下内容:
fotoApparat.takePicture().
toPendingResult().
whenAvailable(bitmapPhoto -> {
ImageView imageView = (ImageView) findViewById(R.id.result);
// rest of your code
});