Получил эту ошибку в игровой консоли kotlin .UninitializedPropertyAccessException - PullRequest
1 голос
/ 15 апреля 2020

Play console screenshot kotlin. UninitializedPropertyAccessException: в com.videoplayer.VideoPlayerActivity.onStart (VideoPlayerActivity.kt: 224) в android .app.Instrumentation.callActivityOnStart (Инструментарий. java: 1395) в android .app.Activity.performStart (Activity. java: 7361) в android .app.ActivityThread.handleStartActivity (ActivityThread. java: 3163) в android .app.servertransaction.TransactionExecutor .performLifecycleSequence (TransactionExecutor. java: 180) в android .app.servertransaction.TransactionExecutor.cycleToPath (TransactionExecutor. java: 165) в android .app.servertransaction.TransactionExecutor.execute *ifecycleState (TransactionExecutor. : 142) в android .app.servertransaction.TransactionExecutor.execute (TransactionExecutor. java: 70) в android .app.ActivityThread $ H.handleMessage (ActivityThread. java: 1970)

Определение переменных

private var captionIconVisibility: Boolean = false
    private  var videoStarted: Boolean=false
    private  var lastItemPosition: Int = 1
    private  var itemsCount: Int = 1
    private var videoWatchedTime: Long=0
    private var isPreparing: Boolean=true
    private lateinit var currentPlayingPlayList: List<ObjectVideo>
    private lateinit var sharedPrefMemory: SharedPrefMemory
    private lateinit var mCastApplication: CastApplication
    private lateinit var player: SimpleExoPlayer
    private var isAdPlaying: Boolean =false
    private lateinit var mediaPlayer: MediaPlayer
  //  private lateinit var dtm: DTM
    private lateinit var adPlayerManger: AdPlayerManger
    private var podSize = 1
    private var adType = "midroll"
    private var videoPaused: Boolean = false
    private lateinit var objectVideo: ObjectVideo
    var currentPlayingVodPosition = 0
    private var previousVideoPositionNumber=-1
    private var playBackPosition:Long=0
    private var numberOfVideoWatched: Int=0
    private var isCaptionsOff : Boolean = false
    private var isInfoLayoutVisible:Boolean = false
    private lateinit var binding: ActivityVideoPlayerBinding
    private lateinit var videoPlayerActivityVM: VideoPlayerActvityVM
    private var midAdPositionList = ArrayList<Long>()
    private var runnable: Runnable? = null
    private val mHandler: Handler = Handler()
    private var watchedVideoStatus: HashMap<String, Long>? = null
    private lateinit var bottomSheetBehavior :BottomSheetBehavior<View>
    private lateinit var bottomSheetRv: RecyclerView
    private lateinit var bottomSheetPlaylistAdapter: BottomSheetPlaylistAdapter
    private var bottomSheetList = ArrayList<ObjectVideo>()
    private var resumedPosition:Long=0
    private var pageNumber:Int =1
    private var url : String = ""
    private var isPreviousClicked: Boolean = false
    private lateinit var mDetector: GestureDetectorCompat
    private lateinit var vods:ArrayList<ObjectVideo>

    companion object {
         var dtm:DTM = DTM()
      //    var vods: ArrayList<ObjectVideo> = ArrayList()
    }

Мой метод OnCreate

override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = DataBindingUtil.setContentView(this, R.layout.activity_video_player)

        // flags to make media player screen full screen
        window.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN)
        window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
        bottomSheetBehavior = BottomSheetBehavior.from(binding.bottomsheetView.bottomSheetLayout)
        bottomSheetRv = binding.bottomsheetView.bottomSheetRv


        sharedPrefMemory = SharedPrefMemory(this, Context.MODE_PRIVATE, true)

//        val mToolbar = binding.toolbarMediaPlayer as Toolbar
//        setSupportActionBar(mToolbar)
//        supportActionBar!!.setDisplayShowTitleEnabled(false)

        val intentObj = intent
      //  dtm = intentObj.getSerializableExtra("dtm") as DTM

      try {
          vods = dtm.videoArrayList

          bottomSheetList = vods
          currentPlayingVodPosition = dtm.position
          Log.d("loggingurl",vods[currentPlayingVodPosition].videoUrl);
          url = dtm.url
          if (!(vods.size>0 && currentPlayingVodPosition<vods.size)){
              finish()

          }
          binding.movie = vods[currentPlayingVodPosition]
          mediaPlayer = PlayerBuilder.getMediaPlayer(this, dtm, vods)
          objectVideo = vods[currentPlayingVodPosition]

      }
      catch (e:java.lang.Exception){
          Toast.makeText(this,"Something went wrong",Toast.LENGTH_SHORT).show()
      }

        bottomSheetBehaviorCallbacks()
        binding.infoImg.setOnClickListener(this)
        binding.repeatImg.setOnClickListener(this)
        binding.captionImg.setOnClickListener(this)


        videoPlayerActivityVM = ViewModelProviders.of(this)[VideoPlayerActvityVM::class.java]

        videoPlayerActivityVM.getMoreVideosList().observe(this, androidx.lifecycle.Observer<List<ObjectVideo>> { moreVideosList ->
            if (moreVideosList.isNotEmpty()) {
                bottomSheetList.addAll(moreVideosList)
                bottomSheetPlaylistAdapter.notifyDataSetChanged()
                mediaPlayer.updatePlayList(moreVideosList)
            } else {
                GlobalObject.hasMoreDataMap[url] = false
            }


        })

        mCastApplication = CastApplication(this, this)
        mCastApplication.createSessionManager()

Ниже мой метод OnStart

 override fun onStart() {
        super.onStart()
        Log.d("LifeCycle", "OnStart is called")
        if (true) {
            player = mediaPlayer.getPlayer()
            isCaptionsOff = sharedPrefMemory.subtitlePreference
            updateCaption()
            player.addListener(this)
            binding.exoPlayerView.player = player
            binding.exoPlayerView.setOnClickListener(this)

            //var pos:Long=0

            mediaPlayer.playVideo(dtm.position,videoPlayerActivityVM.getSeekTime(objectVideo,videoPaused,resumedPosition))

            setBottomSheetPlayList()

            videoPaused = false

        }
    }

Ответы [ 2 ]

1 голос
/ 15 апреля 2020

У меня нет номеров строк, поэтому я просто угадываю здесь.

Взгляните на onCreate:

try {
    vods = dtm.videoArrayList
    // ...
    mediaPlayer = PlayerBuilder.getMediaPlayer(this, dtm, vods)
    objectVideo = vods[currentPlayingVodPosition]
} catch (e: Exception) {
      Toast.makeText(this,"Something went wrong",Toast.LENGTH_SHORT).show()
}

Так что, когда PlayerBuilder.getMediaPlayer(this, dtm, vods) или что-нибудь до этого не удается

  1. mediaPlayer остается неинициализированным,
  2. пользователь получает тост, но вы, как разработчик, не получаете отчета об исключениях,
  3. player = mediaPlayer.getPlayer() происходит во время onStart который стоит кратера sh, потому что (1).

У меня нет решения для вас, код огромен, труден для чтения и труден для рассуждения. Удачи в исправлении.

0 голосов
/ 15 апреля 2020

Эта ошибка означает, что к property с lateinit был получен доступ до его инициализации.

На основании предоставленного вами кода я не могу сказать, какое это поле, но в строке 224 проверьте свойство Вы получаете доступ, потому что он еще не установлен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...