2017-11-04 11 views
-2
override fun onCreate(savedInstanceState: Bundle?) { 
... 
    val mpOkay = MediaPlayer.create (this, R.raw.inordnung) 
... 
} 

作品が、MediaPlayerのグローバル変数をどのように宣言しますか?

val mpOkay = null 
override fun onCreate(savedInstanceState: Bundle?) { 
... 
    mpOkay = MediaPlayer.create (this, R.raw.inordnung) 
... 
} 

var mpOkay 
override fun onCreate(savedInstanceState: Bundle?) { 
... 
    mpOkay = MediaPlayer.create (this, R.raw.inordnung) 
... 
} 

にはありません。

kotlinは新しいMediaplayerを何度も作成してメモリを浪費しますか?

var mpOkay = null 

mpOkayはその型を取得します宣言で

var mpOkay: MediaPlayer? = null 

+0

無効な構文です。まず、Kotlinの構文ドキュメントを読むことをお勧めします。 – m0skit0

+0

あなたは何度も新しいものを作りたいと思っています。 'MediaPlayer'ドキュメントはそれほど多くのことを言います。あなたのアプリが一時停止しているときにリソースを保持することは悪いことです。あなたは、一時停止したときにそれをリリースする必要があります。何かあれば、それは他のリソースの節約は言うまでもなく、あなたがそれを使用していないときに固執しないので、メモリを浪費することの反対です。 – chris

答えて

1

は、次の例のように、それへMediaPlayerを割り当てることができるように、変数の型を宣言する必要がありますこれは、null以外の値を割り当てることができないことを意味します。


そしてこの宿泊施設には宣言された、または推論できるタイプを持っていないので、宣言

var mpOkay 

は、単に有効な構文ではありません。

+0

それはうまく動作します。今私は 'mpOkay.start()'でそれを実行し、 'MediaPlayer'型のヌル可能な受信者に対して' safe(?)または非nullアサート(!!)コールを許可しようとしています。編集:私はそれを 'mpOkay?.start()'で修正しました –

+0

はい、変数またはプロパティをヌル可能に宣言すると、使用時にヌル値をチェックする必要があります。あなたは[null安全性](https://kotlinlang.org/docs/reference/null-safety.html#safe-calls)に関する公式ドキュメントを見てください。 – zsmb13

1

まさにあなたがそれにアクセスする前に、しかし、何らかの理由でnull以外の値に変数を初期化しようとしているが、コンストラクタでそれを行うことはできませんonCreateような場合のために、Kotlinは

lateinit var mpOkay: MediaPlayer 
0
を持っています

他の答えに加えて、 "怠け者"を使用してvalプロパティを設定することもできます(ヌルのテストは不要です)。!!または?を使用してください。

val mp: MediaPlayer by lazy { MediaPlayer.create(context, resId) } 

これはmpの最初のアクセス時に一度だけMediaPlay.create()を実行します。 mpにアクセスする前にcontextが有効であることを確認してください。

関連する問題