whenever I try to open the app it keeps stopping. This issue also comes in many other project also.
Here is my MainActivity.kt
file
<code>package com.shahid.timerlivedata
import android.annotation.SuppressLint
import android.os.Bundle
import android.widget.TextView
import android.widget.Toast
import androidx.activity.enableEdgeToEdge
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat
import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProvider
class MainActivity : AppCompatActivity() {
@SuppressLint("MissingInflatedId")
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
enableEdgeToEdge()
setContentView(R.layout.activity_main)
ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets ->
val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars())
v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom)
insets
}
val TxtCount = findViewById<TextView>(R.id.txtCount)
val edtCount = findViewById<TextView>(R.id.edtCount)
val btnStart = findViewById<TextView>(R.id.btnStart)
val btnStop = findViewById<TextView>(R.id.btnStop)
val mAVieModel = ViewModelProvider(this).get(MainActivityViewModel::class.java)
mAVieModel.startTimer()
mAVieModel._seconds.observe(this, Observer{ seconds ->
TxtCount.text = "$seconds"
})
mAVieModel.finished.observe(this, Observer { check ->
if(check){
Toast.makeText(this,"Time Completed!!", Toast.LENGTH_LONG).show()
}
})
btnStart.setOnClickListener{
if(edtCount.text.isEmpty()){
Toast.makeText(this,"Please Fill the Time", Toast.LENGTH_LONG).show()
}else{
mAVieModel.timerValue.value = edtCount.text.toString().toLong()*1000
mAVieModel.startTimer()
}
}
btnStop.setOnClickListener{
mAVieModel.stopTimer()
}
}
}
</code>
<code>package com.shahid.timerlivedata
import android.annotation.SuppressLint
import android.os.Bundle
import android.widget.TextView
import android.widget.Toast
import androidx.activity.enableEdgeToEdge
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat
import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProvider
class MainActivity : AppCompatActivity() {
@SuppressLint("MissingInflatedId")
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
enableEdgeToEdge()
setContentView(R.layout.activity_main)
ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets ->
val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars())
v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom)
insets
}
val TxtCount = findViewById<TextView>(R.id.txtCount)
val edtCount = findViewById<TextView>(R.id.edtCount)
val btnStart = findViewById<TextView>(R.id.btnStart)
val btnStop = findViewById<TextView>(R.id.btnStop)
val mAVieModel = ViewModelProvider(this).get(MainActivityViewModel::class.java)
mAVieModel.startTimer()
mAVieModel._seconds.observe(this, Observer{ seconds ->
TxtCount.text = "$seconds"
})
mAVieModel.finished.observe(this, Observer { check ->
if(check){
Toast.makeText(this,"Time Completed!!", Toast.LENGTH_LONG).show()
}
})
btnStart.setOnClickListener{
if(edtCount.text.isEmpty()){
Toast.makeText(this,"Please Fill the Time", Toast.LENGTH_LONG).show()
}else{
mAVieModel.timerValue.value = edtCount.text.toString().toLong()*1000
mAVieModel.startTimer()
}
}
btnStop.setOnClickListener{
mAVieModel.stopTimer()
}
}
}
</code>
package com.shahid.timerlivedata
import android.annotation.SuppressLint
import android.os.Bundle
import android.widget.TextView
import android.widget.Toast
import androidx.activity.enableEdgeToEdge
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat
import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProvider
class MainActivity : AppCompatActivity() {
@SuppressLint("MissingInflatedId")
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
enableEdgeToEdge()
setContentView(R.layout.activity_main)
ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets ->
val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars())
v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom)
insets
}
val TxtCount = findViewById<TextView>(R.id.txtCount)
val edtCount = findViewById<TextView>(R.id.edtCount)
val btnStart = findViewById<TextView>(R.id.btnStart)
val btnStop = findViewById<TextView>(R.id.btnStop)
val mAVieModel = ViewModelProvider(this).get(MainActivityViewModel::class.java)
mAVieModel.startTimer()
mAVieModel._seconds.observe(this, Observer{ seconds ->
TxtCount.text = "$seconds"
})
mAVieModel.finished.observe(this, Observer { check ->
if(check){
Toast.makeText(this,"Time Completed!!", Toast.LENGTH_LONG).show()
}
})
btnStart.setOnClickListener{
if(edtCount.text.isEmpty()){
Toast.makeText(this,"Please Fill the Time", Toast.LENGTH_LONG).show()
}else{
mAVieModel.timerValue.value = edtCount.text.toString().toLong()*1000
mAVieModel.startTimer()
}
}
btnStop.setOnClickListener{
mAVieModel.stopTimer()
}
}
}
Here is my LogCat
. I think the Actual Problem is here, but I can’t get it ->
<code>[871] amjc.a(209): VerifyApps: APK Analysis scan failed for com.shahid.timerlivedata (Ask Gemini)
com.google.android.finsky.verifier.apkanalysis.client.ApkAnalysisException: DOWNLOAD_FILE_NOT_FOUND_EXCEPTION while analyzing APK
at ambw.b(PG:1260)
at ambw.a(PG:13)
at bgbs.M(PG:14)
at bgbs.d(PG:10)
at algz.b(PG:605)
at algz.a(PG:222)
at bfwu.J(PG:40)
at bfwu.C(PG:12)
at amjc.a(PG:113)
at algz.b(PG:632)
at bfvd.x(PG:6)
at bgcb.run(PG:111)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
at qek.run(PG:1211)
at java.lang.Thread.run(Thread.java:761)
Package still installed com.shahid.timerlivedata
Late-enabling -Xcheck:jni
Unexpected CPU variant for X86 using defaults: x86
ClassLoader referenced unknown path: /data/app/com.shahid.timerlivedata-1/lib/x86
Background sticky concurrent mark sweep GC freed 21607(876KB) AllocSpace objects, 0(0B) LOS objects, 49% free, 4MB/8MB, paused 6.612ms total 210.244ms
Checking for metadata for AppLocalesMetadataHolderService : Service not found
Before Android 4.1, method android.graphics.PorterDuffColorFilter androidx.vectordrawable.graphics.drawable.VectorDrawableCompat.updateTintFilter(android.graphics.PorterDuffColorFilter, android.content.res.ColorStateList, android.graphics.PorterDuff$Mode) would have incorrectly overridden the package-private method in android.graphics.drawable.Drawable
Shutting down VM
FATAL EXCEPTION: main (Ask Gemini)
Process: com.shahid.timerlivedata, PID: 14609
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.shahid.timerlivedata/com.shahid.timerlivedata.MainActivity}: java.lang.NullPointerException
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2665)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726)
at android.app.ActivityThread.-wrap12(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6119)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
Caused by: java.lang.NullPointerException
at com.shahid.timerlivedata.MainActivityViewModel.startTimer(MainActivityViewModel.kt:24)
at com.shahid.timerlivedata.MainActivity.onCreate(MainActivity.kt:32)
at android.app.Activity.performCreate(Activity.java:6679)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2618)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726)
at android.app.ActivityThread.-wrap12(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6119)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
Debugger is no longer active
Starting a blocking GC Instrumentation
</code>
<code>[871] amjc.a(209): VerifyApps: APK Analysis scan failed for com.shahid.timerlivedata (Ask Gemini)
com.google.android.finsky.verifier.apkanalysis.client.ApkAnalysisException: DOWNLOAD_FILE_NOT_FOUND_EXCEPTION while analyzing APK
at ambw.b(PG:1260)
at ambw.a(PG:13)
at bgbs.M(PG:14)
at bgbs.d(PG:10)
at algz.b(PG:605)
at algz.a(PG:222)
at bfwu.J(PG:40)
at bfwu.C(PG:12)
at amjc.a(PG:113)
at algz.b(PG:632)
at bfvd.x(PG:6)
at bgcb.run(PG:111)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
at qek.run(PG:1211)
at java.lang.Thread.run(Thread.java:761)
Package still installed com.shahid.timerlivedata
Late-enabling -Xcheck:jni
Unexpected CPU variant for X86 using defaults: x86
ClassLoader referenced unknown path: /data/app/com.shahid.timerlivedata-1/lib/x86
Background sticky concurrent mark sweep GC freed 21607(876KB) AllocSpace objects, 0(0B) LOS objects, 49% free, 4MB/8MB, paused 6.612ms total 210.244ms
Checking for metadata for AppLocalesMetadataHolderService : Service not found
Before Android 4.1, method android.graphics.PorterDuffColorFilter androidx.vectordrawable.graphics.drawable.VectorDrawableCompat.updateTintFilter(android.graphics.PorterDuffColorFilter, android.content.res.ColorStateList, android.graphics.PorterDuff$Mode) would have incorrectly overridden the package-private method in android.graphics.drawable.Drawable
Shutting down VM
FATAL EXCEPTION: main (Ask Gemini)
Process: com.shahid.timerlivedata, PID: 14609
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.shahid.timerlivedata/com.shahid.timerlivedata.MainActivity}: java.lang.NullPointerException
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2665)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726)
at android.app.ActivityThread.-wrap12(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6119)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
Caused by: java.lang.NullPointerException
at com.shahid.timerlivedata.MainActivityViewModel.startTimer(MainActivityViewModel.kt:24)
at com.shahid.timerlivedata.MainActivity.onCreate(MainActivity.kt:32)
at android.app.Activity.performCreate(Activity.java:6679)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2618)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726)
at android.app.ActivityThread.-wrap12(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6119)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
Debugger is no longer active
Starting a blocking GC Instrumentation
</code>
[871] amjc.a(209): VerifyApps: APK Analysis scan failed for com.shahid.timerlivedata (Ask Gemini)
com.google.android.finsky.verifier.apkanalysis.client.ApkAnalysisException: DOWNLOAD_FILE_NOT_FOUND_EXCEPTION while analyzing APK
at ambw.b(PG:1260)
at ambw.a(PG:13)
at bgbs.M(PG:14)
at bgbs.d(PG:10)
at algz.b(PG:605)
at algz.a(PG:222)
at bfwu.J(PG:40)
at bfwu.C(PG:12)
at amjc.a(PG:113)
at algz.b(PG:632)
at bfvd.x(PG:6)
at bgcb.run(PG:111)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
at qek.run(PG:1211)
at java.lang.Thread.run(Thread.java:761)
Package still installed com.shahid.timerlivedata
Late-enabling -Xcheck:jni
Unexpected CPU variant for X86 using defaults: x86
ClassLoader referenced unknown path: /data/app/com.shahid.timerlivedata-1/lib/x86
Background sticky concurrent mark sweep GC freed 21607(876KB) AllocSpace objects, 0(0B) LOS objects, 49% free, 4MB/8MB, paused 6.612ms total 210.244ms
Checking for metadata for AppLocalesMetadataHolderService : Service not found
Before Android 4.1, method android.graphics.PorterDuffColorFilter androidx.vectordrawable.graphics.drawable.VectorDrawableCompat.updateTintFilter(android.graphics.PorterDuffColorFilter, android.content.res.ColorStateList, android.graphics.PorterDuff$Mode) would have incorrectly overridden the package-private method in android.graphics.drawable.Drawable
Shutting down VM
FATAL EXCEPTION: main (Ask Gemini)
Process: com.shahid.timerlivedata, PID: 14609
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.shahid.timerlivedata/com.shahid.timerlivedata.MainActivity}: java.lang.NullPointerException
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2665)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726)
at android.app.ActivityThread.-wrap12(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6119)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
Caused by: java.lang.NullPointerException
at com.shahid.timerlivedata.MainActivityViewModel.startTimer(MainActivityViewModel.kt:24)
at com.shahid.timerlivedata.MainActivity.onCreate(MainActivity.kt:32)
at android.app.Activity.performCreate(Activity.java:6679)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2618)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726)
at android.app.ActivityThread.-wrap12(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6119)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
Debugger is no longer active
Starting a blocking GC Instrumentation
Here is my activity_main.kt
<code><?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/main"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:id="@+id/txtCount"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="0"
android:textSize="34sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.155" />
<EditText
android:id="@+id/edtCount"
android:layout_width="wrap_content"
android:layout_height="48dp"
android:layout_marginTop="52dp"
android:ems="10"
android:hint="Enter timer in sec."
android:inputType="text"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.497"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/txtCount" />
<Button
android:id="@+id/btnStart"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="212dp"
android:text="Start"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/edtCount" />
<Button
android:id="@+id/btnStop"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="44dp"
android:text="Stop"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/btnStart" />
</androidx.constraintlayout.widget.ConstraintLayout>
</code>
<code><?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/main"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:id="@+id/txtCount"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="0"
android:textSize="34sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.155" />
<EditText
android:id="@+id/edtCount"
android:layout_width="wrap_content"
android:layout_height="48dp"
android:layout_marginTop="52dp"
android:ems="10"
android:hint="Enter timer in sec."
android:inputType="text"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.497"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/txtCount" />
<Button
android:id="@+id/btnStart"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="212dp"
android:text="Start"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/edtCount" />
<Button
android:id="@+id/btnStop"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="44dp"
android:text="Stop"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/btnStart" />
</androidx.constraintlayout.widget.ConstraintLayout>
</code>
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/main"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:id="@+id/txtCount"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="0"
android:textSize="34sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.155" />
<EditText
android:id="@+id/edtCount"
android:layout_width="wrap_content"
android:layout_height="48dp"
android:layout_marginTop="52dp"
android:ems="10"
android:hint="Enter timer in sec."
android:inputType="text"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.497"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/txtCount" />
<Button
android:id="@+id/btnStart"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="212dp"
android:text="Start"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/edtCount" />
<Button
android:id="@+id/btnStop"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="44dp"
android:text="Stop"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/btnStart" />
</androidx.constraintlayout.widget.ConstraintLayout>
Here is another the ViewModel.kt
<code>package com.shahid.timerlivedata
import android.os.CountDownTimer
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
class MainActivityViewModel : ViewModel() {
lateinit var timer : CountDownTimer
private var remaining_seconds = MutableLiveData<Int>()
private var _finished = MutableLiveData<Boolean>()
val finished : LiveData<Boolean>
get() = _finished
val _seconds : LiveData <Int>
get() = remaining_seconds
var timerValue = MutableLiveData<Long>()
fun startTimer(){
timer = object : CountDownTimer(timerValue.value!!.toLong(),1000) {
override fun onTick(millisUntilFinished: Long) {
val remainingTime = millisUntilFinished/1000
remaining_seconds.value = remainingTime.toInt()
}
override fun onFinish() {
_finished.value = true
}
}
}
fun stopTimer (){
timer.cancel()
}
}
</code>
<code>package com.shahid.timerlivedata
import android.os.CountDownTimer
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
class MainActivityViewModel : ViewModel() {
lateinit var timer : CountDownTimer
private var remaining_seconds = MutableLiveData<Int>()
private var _finished = MutableLiveData<Boolean>()
val finished : LiveData<Boolean>
get() = _finished
val _seconds : LiveData <Int>
get() = remaining_seconds
var timerValue = MutableLiveData<Long>()
fun startTimer(){
timer = object : CountDownTimer(timerValue.value!!.toLong(),1000) {
override fun onTick(millisUntilFinished: Long) {
val remainingTime = millisUntilFinished/1000
remaining_seconds.value = remainingTime.toInt()
}
override fun onFinish() {
_finished.value = true
}
}
}
fun stopTimer (){
timer.cancel()
}
}
</code>
package com.shahid.timerlivedata
import android.os.CountDownTimer
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
class MainActivityViewModel : ViewModel() {
lateinit var timer : CountDownTimer
private var remaining_seconds = MutableLiveData<Int>()
private var _finished = MutableLiveData<Boolean>()
val finished : LiveData<Boolean>
get() = _finished
val _seconds : LiveData <Int>
get() = remaining_seconds
var timerValue = MutableLiveData<Long>()
fun startTimer(){
timer = object : CountDownTimer(timerValue.value!!.toLong(),1000) {
override fun onTick(millisUntilFinished: Long) {
val remainingTime = millisUntilFinished/1000
remaining_seconds.value = remainingTime.toInt()
}
override fun onFinish() {
_finished.value = true
}
}
}
fun stopTimer (){
timer.cancel()
}
}
1