Home > Back-end >  How can I assign a null default value for MediaRecorder.OnInfoListener?
How can I assign a null default value for MediaRecorder.OnInfoListener?

Time:01-27

The Code A can work well, I hope to assign a null default value for MediaRecorder.OnInfoListener.

But both Code B and Code C don't work, how can I fix it ?

Code A

    fun startRecord(filename:String, mOnInfoListener: MediaRecorder.OnInfoListener){
        mRecorder = MediaRecorder()
        mRecorder?.let {
            with(it) {              
                setOnInfoListener(mOnInfoListener)
   
        }
    }


    public interface OnInfoListener
    {       
        void onInfo(MediaRecorder mr, int what, int extra);
    }

Code B

fun startRecord(filename:String, mOnInfoListener: MediaRecorder.OnInfoListener={ }){
       ...
}

Code C

fun startRecord(filename:String, mOnInfoListener: MediaRecorder.OnInfoListener=null){
       ...
}

CodePudding user response:

First, this does the same thing as your Code A, but it's cleaner:

fun startRecord(filename:String, mOnInfoListener: MediaRecorder.OnInfoListener) {
    mRecorder = MediaRecorder().apply {
        setOnInfoListener(mOnInfoListener)
    }
}

If you want the property to possibly be null like in Code C, you have to put a ? after the type. Then it will allow you to set it as null by default:

fun startRecord(filename:String, mOnInfoListener: MediaRecorder.OnInfoListener? = null) {
    mRecorder = MediaRecorder().apply {
        if (mOnInfoListener != null) setOnInfoListener(mOnInfoListener)
    }
}

Here's how you could do something like Code B, where it isn't null but instead it exists and simply does nothing. You can't pass a bare lambda because SAM conversion only works when you're calling a function. Instead, you have to use the name of the interface like a function call with SAM-converted lambda after it:

fun startRecord(filename:String, mOnInfoListener: MediaRecorder.OnInfoListener = MediaRecorder.OnInfoListener { }) {
    mRecorder = MediaRecorder().apply {
        setOnInfoListener(mOnInfoListener)
    }
}
  •  Tags:  
  • Related