Как правильно инициализировать экземпляр Retrofit - PullRequest
0 голосов
/ 22 апреля 2020

Я пытался создать приложение Android на Kotlin, используя RX Java, RetroFit и NodeJS с помощью обучающего видео. После добавления этой строки - 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()
}
}

1 Ответ

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

Вы пытаетесь использовать функции Java 8 в более старой версии Java. Добавьте это в build.gradle:

android {
 ...
 compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
    kotlinOptions {
        jvmTarget = "1.8"
    }
}
вашего приложения
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...