Kotlin Android | Flow Api |
Step 1:
Open build.gradle(:app) and add following dependency and rebuild the project.
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.5.0'
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.5.0'
# flow{} builder : flow{} | flowOn() | collect{} | catch{}
MainActivity:
public class MainActivity : AppCompatActivity() {
private val binding by lazy {
ActivityMainBinding.inflate(layoutInflater)
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(binding.root)
runBlocking {
getData().catch { e ->
Log.d("Tag", "" + e.message);
}.collect {
Log.d("Tag", "" + it);
}
}
}
fun getData(): Flow<Int> = flow {
for (i in 1..5) {
delay(500)
emit(i)
}
}.flowOn(Dispatchers.IO)
}
Output:
D/Tag: 1
D/Tag: 2
D/Tag: 3
D/Tag: 4
D/Tag: 5
# flowOf()public class MainActivity : AppCompatActivity() {
private val binding by lazy {
ActivityMainBinding.inflate(layoutInflater)
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(binding.root)
val data = flowOf(1, 23, 4, 56, 43).flowOn(Dispatchers.IO)
runBlocking {
data.catch { e ->
Log.d("Tag", "" + e.message);
}.collect {
Log.d("Tag", "" + it);
}
}
}
}Output:D/Tag: 1
D/Tag: 23
D/Tag: 4
D/Tag: 56
D/Tag: 43
# asFlow()public class MainActivity : AppCompatActivity() {
private val binding by lazy {
ActivityMainBinding.inflate(layoutInflater)
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(binding.root)
val data = listOf(1, 2, 3, 4).asFlow().flowOn(Dispatchers.IO)
runBlocking {
data.catch { e ->
Log.d("Tag", "" + e.message);
}.collect {
Log.d("Tag", "" + it);
}
}
}
}Output:D/Tag: 1
D/Tag: 2
D/Tag: 3
D/Tag: 4
# map{}public class MainActivity : AppCompatActivity() {
private val binding by lazy {
ActivityMainBinding.inflate(layoutInflater)
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(binding.root)
val data = flowOf(1, 2, 3, 4, 5).flowOn(Dispatchers.IO)
runBlocking {
data.map { value ->
value +1
}.catch { e ->
Log.d("Tag", "" + e.message);
}.collect {
Log.d("Tag", "" + it);
}
}
}
}Output:D/Tag: 2
D/Tag: 3
D/Tag: 4
D/Tag: 5
D/Tag: 6
# filter{}public class MainActivity : AppCompatActivity() {
private val binding by lazy {
ActivityMainBinding.inflate(layoutInflater)
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(binding.root)
val data = flowOf(1, 2, 3, 4, 5, 6).flowOn(Dispatchers.IO)
runBlocking {
data.filter { value ->
value%2 == 0
}.catch { e ->
Log.d("Tag", "" + e.message);
}.collect {
Log.d("Tag", "" + it);
}
}
}
}Output:D/Tag: 2
D/Tag: 4
D/Tag: 6
Comments
Post a Comment