@KotlinLangRu

Страница 50 из 90
iTEYE
17.02.2018
13:57:49
В чём-то другом.
Пока решил в ActivityBase сделать var mContext: Context? = null А в классах наследниках в onCreate делаю this.mContext = applicationContext as Context

iTEYE
17.02.2018
14:00:58
бред, активити — и есть контекст
тогда какое может быть решение?

трейс указывает именно на Toast.makeText(this, msg, Toast.LENGTH_LONG).show()

Google
Quantum Harmonizer
17.02.2018
14:01:53
тогда какое может быть решение?
показать правдивый трейс и код, на который он показывает

iTEYE
17.02.2018
14:04:05
https://pastebin.com/gvmEYhdu

Quantum Harmonizer
17.02.2018
14:05:27
https://pastebin.com/gvmEYhdu
выглядит так, будто вызываешь Toast.makeText(null, R.string...., ...)

iTEYE
17.02.2018
14:05:49
именно. но там не null а this

https://pastebin.com/LvETmvGc

Quantum Harmonizer
17.02.2018
14:32:37
https://pastebin.com/LvETmvGc
так нет, там строка. А стектрейс — будто там ресурс.

iTEYE
17.02.2018
14:50:27
так строка это аргумет который я передаю в метод.

fun showToast(msg: String) { Toast.makeText(this, msg, Toast.LENGTH_LONG).show() } showToast("Blah blah blah...")

короче из-за того что экземпляр класса создается вот так val presenterAuthEmail = PresenterAuthEmail() а не val intent = Intent(this, ActivityAuthChoose::class.java).apply {} startActivity(intent) возникает ошибка при выхове метода.

ну всмысле не через Intent.

но ведь PresenterAuthEmail у меня не должен создаваться через Intent. В этом нет смысла... Видимо придется сходить в чат по архитектуре.

Quantum Harmonizer
17.02.2018
14:55:00
Вижу здесь несвязный набор слов. Рано лезть в архитектуру и в андроид, не разобравшись, как работать со стектрейсами.

iTEYE
17.02.2018
14:58:24
open class ActivityBase: AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) } fun showToast(msg: String) { Toast.makeText(this, msg, Toast.LENGTH_LONG).show() // тут возникает ошибка: // Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.res.Resources android.content.Context.getResources()' on a null object reference } } open class ActivityApp: ActivityBase() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_base) val testClass = TestClass() testClass.letsShow() } } class TestClass: ActivityBase() { fun letsShow(){ showToast("Blah!!!") } }

Google
iTEYE
17.02.2018
15:01:17
А кто должен создавать активити?

Quantum Harmonizer
17.02.2018
15:02:34
А кто должен создавать активити?
Фреймворк, посредством startActivity. Только так.

Почему?
Потому что кроме new фреймворк делает ещё кучу разных телодвижений, включая использование приватных API.

iTEYE
17.02.2018
15:05:34
Потому что кроме new фреймворк делает ещё кучу разных телодвижений, включая использование приватных API.
А ну это понятно. У меня ActivityApp вызывается через `val intent = Intent(this, ActivityApp::class.java).apply {} startActivity(intent)` Но Presenter то это не активити верно?

В примере выше в роди презентера выступает TestClass

iTEYE
17.02.2018
15:16:27
Так вот как мне связать презентер со вью?

Quantum Harmonizer
17.02.2018
15:28:36
Так вот как мне связать презентер со вью?
Передать вью ему в конструктор.

iTEYE
17.02.2018
15:30:09
Передать вью ему в конструктор.
а onCreate там не нужен я понимаю, просто буду использовать то что пришло в качестве аргумента (view родителя)?

Quantum Harmonizer
17.02.2018
15:31:51
а onCreate там не нужен я понимаю, просто буду использовать то что пришло в качестве аргумента (view родителя)?
Почему бы не взять какую-нибудь MVP-библиотеку, где эти вопросы уже решены?

Quantum Harmonizer
17.02.2018
15:34:34
типа Moxy?
Да, например.

iTEYE
17.02.2018
15:35:22
Да, например.
ну неплохо было бы понять а потом уже использовать простые решения imho.

Quantum Harmonizer
17.02.2018
15:35:43
ну неплохо было бы понять а потом уже использовать простые решения imho.
Да, но тогда лучше начать с голой разработки, без MVP.

Понять Android, прочувствовать Kotlin.

iTEYE
18.02.2018
19:56:43
var resultIs = arrayOf("error","Default statement") fAuth?.createUserWithEmailAndPassword(email, password)?.addOnCompleteListener({ task -> if (task.isSuccessful) { resultIs = arrayOf("success", "User registered!") } else { resultIs = arrayOf("error", "User registration failure!") } }) resultIs внутри этого замыкания не переопределяется. читал доки но что-то неодупляю с областями видимости. подскажите плиз.

Я понял, оно асинхронно.

Google
Quantum Harmonizer
18.02.2018
20:11:13
всмысле что возвращается всегда arrayOf("error","Default statement")
Догадываюсь, что возвращается из функции. Этот код — весь сплошь ужасающий костыль.

iTEYE
18.02.2018
20:11:47
если не считать ? то это пример из доков по firebase

Quantum Harmonizer
18.02.2018
20:13:13
если не считать ? то это пример из доков по firebase
можно ссылку? Я им глаз на ж... если там действительно так написано.

iTEYE
18.02.2018
20:13:39
Там примеры на java https://firebase.google.com/docs/auth/android/password-auth

Quantum Harmonizer
18.02.2018
20:14:51
Там примеры на java https://firebase.google.com/docs/auth/android/password-auth
Ну там же нет мутирования захваченного массива. (и на Java нельзя это сделать так просто)

iTEYE
18.02.2018
20:15:56
Что ты имеешь ввиду под "мутирования захваченного массива"?

Admin


Quantum Harmonizer
18.02.2018
20:17:12
Что ты имеешь ввиду под "мутирования захваченного массива"?
var resultIs — это переменная. Она захватывается лямбдой { task ->. Значение переменной меняется (переменная мутируется).

iTEYE
18.02.2018
20:19:00
Как я понял addOnCompleteListener выполняется в отдельном контексте и даже если значение переменной и меняется то на return за лямбдой это не влияет никак, т.к. выход из основной функции происходит раньше чем внутри лямбды меняется значение переменной.

iTEYE
18.02.2018
20:22:44
с точки зрения архитектуры как тогда получить данные из замыкания? подписываться на изменение данных?

Quantum Harmonizer
18.02.2018
20:27:04
с точки зрения архитектуры как тогда получить данные из замыкания? подписываться на изменение данных?
Тут даже дело не в архитектуре и не в замыкании, а в асинхронщине. Из замыкания тогда и нужно изменять состояние (в примерах Firebase — updateUI или как-то так).

iTEYE
18.02.2018
20:28:48
Но получается что я из repository (структуры которая занимается обменом данными с источником данных) изменяю view, а это значит что мне надо прокидывать активити в repository

и получается что я отхожу от MVP

stas
18.02.2018
20:30:58
и получается что я отхожу от MVP
Зато присоеденился к аджайл)))

iTEYE
18.02.2018
20:33:06
Зато присоеденился к аджайл)))
это скорее напоминает спагетти код из web dev.

Quantum Harmonizer
18.02.2018
20:34:22
О спасибо большое!
Только надо отменить асинхронную операцию, когда вьюха уничтожается.

Google
iTEYE
18.02.2018
20:34:50
Quantum Harmonizer
18.02.2018
20:35:08
Ruslan
19.02.2018
04:58:52
Всем привет! Знатоки mvvm, подскажите пожалуйста, как из viewmodel обратиться к view? Viewmodel же не может иметь ссылку на view. Вот в mvp ,например, можно просто вызвать метод из интерфейса view, ну там прогресс бар показать или ещё что

whalemare
19.02.2018
05:03:25
Всем привет! Знатоки mvvm, подскажите пожалуйста, как из viewmodel обратиться к view? Viewmodel же не может иметь ссылку на view. Вот в mvp ,например, можно просто вызвать метод из интерфейса view, ну там прогресс бар показать или ещё что
не знаток, но тут идеалогия в том, что viewmodel сам эммитит события, на которые подписываются view т.е. ты должен иметь какой-то источник данных в твоей viewmodel на который подпишется твоя view. именно так и будет происходить взаимодействие

Alexander
19.02.2018
05:35:01
Всем привет! Знатоки mvvm, подскажите пожалуйста, как из viewmodel обратиться к view? Viewmodel же не может иметь ссылку на view. Вот в mvp ,например, можно просто вызвать метод из интерфейса view, ну там прогресс бар показать или ещё что
Складываешь данные в LiveData внутри ViewModel, подписываешься на данные внутри view. В случае прогресс бара хранишь там прогресс и булевую. View просто привязывает это состояние к ui. Либо ручками в подписке на эту livedata, либо через databinding. Livedata просто как вариант, подойдёт любая реализация с подпиской, в RxJava только надо за life cycle ещё проследить

Ruslan
19.02.2018
05:40:25
Спасибо, кажется понял

stas
20.02.2018
20:29:26
а как модуль взять?))))?

все) узнал)) Int.let{ Math.abc(it) } Может кому нужно будет)

Quantum Harmonizer
20.02.2018
20:33:54
abs только

Страница 50 из 90