Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
颤振-通过从Kotlin到Dart的事件通道获取数据_Kotlin_Flutter_Dart - Fatal编程技术网

颤振-通过从Kotlin到Dart的事件通道获取数据

颤振-通过从Kotlin到Dart的事件通道获取数据,kotlin,flutter,dart,Kotlin,Flutter,Dart,我有一个问题已经解决了20多个小时:我想使用事件通道从Spotify SDK获取数据流。在本地,我可以通过订阅我的PlayerState自动显示当前歌曲的状态。我的目标是能够访问这个数据流与我的颤振应用程序。在本机端,我可以毫无问题地输出数据流。但我也希望能够在我的Flitter应用程序中访问这些数据。问题是我没有从Kotlin到Dart获取数据。我无法执行命令mEventSink?.success(position),因为mEventSink为零。 如果有人能帮我解决这个问题,那就太好了 //

我有一个问题已经解决了20多个小时:我想使用事件通道从Spotify SDK获取数据流。在本地,我可以通过订阅我的PlayerState自动显示当前歌曲的状态。我的目标是能够访问这个数据流与我的颤振应用程序。在本机端,我可以毫无问题地输出数据流。但我也希望能够在我的Flitter应用程序中访问这些数据。问题是我没有从Kotlin到Dart获取数据。我无法执行命令
mEventSink?.success(position)
,因为mEventSink为零。 如果有人能帮我解决这个问题,那就太好了

//...

class Spotifysdk04Plugin(private var registrar: Registrar): MethodCallHandler, EventChannel.StreamHandler {
    //...
    private var mEventSink: EventChannel.EventSink? = null

  companion object {
    @JvmStatic
    fun registerWith(registrar: Registrar) {
      val channel = MethodChannel(registrar.messenger(), "spotifysdk")
      channel.setMethodCallHandler(Spotifysdk04Plugin(registrar))

        val eventChannel = EventChannel(registrar.messenger(), "timerStream")
        eventChannel.setStreamHandler(Spotifysdk04Plugin(registrar))
    }
  }

  override fun onMethodCall(call: MethodCall, result: Result) {
    if (call.method == "loginAppRemote") {
        //...
    } else if(call.method == "initEventStream") {
        try {
            spotifyAppRemote!!.playerApi.subscribeToPlayerState()
                    .setEventCallback { playerState: PlayerState? ->
                        Log.d("test", "test24")
                        var position = playerState!!.playbackPosition.toDouble()
                        Log.d("playbackPosition1", position.toString())
                        if(mEventSink != null) {
                            Log.d("test", "test25")
                            mEventSink?.success(position)
                        } else {
                            Log.d("test", "mEventSink == null")
                        }
                    }
        } catch (err:Throwable) {
            Log.v("initEventStreamError",err.message.toString())
            result.success(false)
        }
    } else {
      result.notImplemented()
    }
  }

    override fun onCancel(arguments: Any?) {
        mEventSink = null
    }

    override fun onListen(arguments: Any?, eventSink: EventChannel.EventSink) {
        mEventSink = eventSink
    }
}

我找到了一个解决方案:

override fun onListen(p0: Any?, p1: EventChannel.EventSink?) {
        mEventSink = p1
        Log.d("test", "test1")
        if(spotifyAppRemote == null) {
            Log.d("test", "test2")
        }

        val connectionParams = ConnectionParams.Builder(clientId)
                .setRedirectUri(redirectUri)
                .showAuthView(true)
                .build()

        SpotifyAppRemote.connect(registrar.context(), connectionParams, object : Connector.ConnectionListener {
            override fun onConnected(appRemote: SpotifyAppRemote) {
                spotifyAppRemote = appRemote
                if(spotifyAppRemote != null) {
                    Log.d("test", "test3")
                    spotifyAppRemote!!.playerApi.subscribeToPlayerState()
                            .setEventCallback { playerState: PlayerState? ->
                                Log.d("test", "test24")
                                var position = playerState!!.playbackPosition.toDouble()
                                Log.d("playbackPosition1", position.toString())
                                if(mEventSink != null) {
                                    Log.d("test", "test25")
                                    mEventSink?.success(position)
                                } else {
                                    Log.d("test", "mEventSink == null")
                                }
                            }
                }

                Log.d("Spotify App Remote Login", "Connected!")
            }

            override fun onFailure(throwable: Throwable) {
                Log.e("Spotify App Remote Login", "Error!", throwable)
            }
        })
    }