如何正确初始化 Retrofit 实例

How to initialize Retrofit instance correctly

我一直在尝试通过教程视频在 Kotlin 上使用 RXJava、RetroFit 和 NodeJS 制作一个 Android 应用程序。 添加此字符串后 - val retrofit = RetroFitClient.getInstance() - 该应用程序无法在我的模拟器上打开,因此我无法注册或登录。

有MainActivity代码,项目在这个仓库https://github.com/ladamengh/LoginregisterApp/tree/master/app/src/main/java/com/example/loginregister

class MainActivity : AppCompatActivity() {

lateinit var IMyService:INodeJS
internal var disposables = CompositeDisposable()
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

    // init API
     val retrofit = RetroFitClient.getInstance()
     var IMyService = retrofit.create(INodeJS::class.java)

    login_button.setOnClickListener {
        loginUser(edit_email.text.toString(), password.text.toString())
    }

    register_button.setOnClickListener {
        registerUser(edit_email.text.toString(), password.text.toString())
    }
}

override fun onStop() {
    disposables.clear() // do not send event after activity has been stopped
    super.onStop()
}

override fun onDestroy() {
    disposables.clear() // do not send event after activity has been destroyed
    super.onDestroy()
}

private fun loginUser(email: String, password: String) {
    disposables.addAll(IMyService.loginUser(email, password)
        .subscribeOn(Schedulers.io())
        .observeOn(AndroidSchedulers.mainThread())
        .subscribe { message ->
            if (message.contains("encrypted_password"))
                Toast.makeText(this, "Login success", Toast.LENGTH_LONG).show()
            else
                Toast.makeText(this, message, Toast.LENGTH_LONG).show()
        })
}

private fun registerUser(email: String, password: String) {
    val enter_name_view = LayoutInflater.from(this)
        .inflate(R.layout.enter_name_layout, null)

    MaterialStyledDialog.Builder(this)
        .setTitle("Register")
        .setDescription("One more step")
        .setCustomView(enter_name_view)
        .setIcon(R.drawable.ic_user)
        .setNegativeText("Cancel")
        .onNegative { dialog, _ -> dialog.dismiss() }
        .setPositiveText("Register")
        .onPositive {
                _, _ ->
                val editName = enter_name_view.findViewById<View>(R.id.name) as MaterialEditText

                disposables.addAll(IMyService.registerUser(email, editName.text.toString(), password)
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe { message ->
                        Toast.makeText(this, message, Toast.LENGTH_LONG).show()
                })
        }
        .show()
}
}

您正在尝试在较旧的 Java 版本上使用 Java 8 功能。 将此添加到您应用的 build.gradle:

android {
 ...
 compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
    kotlinOptions {
        jvmTarget = "1.8"
    }
}