Kotlin Android | Flow Api |

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