前提・実現したいこと
ViewModelからMainActivityで定義したメソッドを呼び出したいです。どのようにコードを直せばいいか教えていただきたいです。
発生している問題・エラーメッセージ
java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.Context android.content.Context.getApplicationContext()' on a null object reference
該当のソースコード
MainActivity内で定義したメソッドのコード
kotlin
1fun playAlarm() { 2 uri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM) 3 4 try { 5 mediaPlayer = MediaPlayer() 6 mediaPlayer!!.setAudioStreamType(AudioManager.STREAM_ALARM) 7 mediaPlayer!!.setDataSource(getApplicationContext(), uri!!) 8 true.also { mediaPlayer!!.isLooping = it } 9 mediaPlayer!!.prepare() 10 mediaPlayer!!.start() 11 } catch (e: IOException) { 12 e.printStackTrace() 13 } 14 }
ViewModelでMainActivityで定義したメソッドを呼び出しているコード
kotlin
1fun startTimer(time: Long) { 2 mCountDown = object : CountDownTimer(time, 1000) { 3 override fun onTick(millisUntilFinished: Long) { 4 current = millisUntilFinished 5 convertDisplayTime(millisUntilFinished) 6 } 7 override fun onFinish() { 8 finishSentence.value = "Finish" 9 //ここでMainActivityのメソッドを呼ぶ 10 MainActivity().playAlarm() 11 } 12 } 13 mCountDown.start() 14 isRunning = true 15 }
タイマーがゼロになったら、音楽を再生するという仕様です。
試したこと
・このエラーnull objectに対して、getApplicationContext()を呼び出しているため、起きているもののようです。原因が分かったとところでどのように直せばよいのか分かりません。ネットでContextについて学習しましたが、じゃあ実際にどのようにコードを書けばよいのかが分かりません。
・MainActivityにメソッドを書きましたが、MainActivity内に書く必要がないので、ViewModel内にメソッドを記述したところ、setDatasourceの引数に渡すContextがないと怒られてしまいました。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/03/30 06:07 編集
2021/03/30 06:18
2021/03/30 06:32