Ответы пользователя по тегу Java
  • Как прокачать навык разработки архитектуры информационной системы?

    artemgapchenko
    @artemgapchenko
    Чтение (Роберт Мартин aka Uncle Bob, Майкл Физерс, Стив Макконнелл, Банда Четырех и так далее), изучение чужого кода и практика. Только так. Можете начать с изучения аббревиатуры SOLID (всё тот же Мартин, книга называется "Быстрая разработка программ. Принципы, примеры, практика") и выбирать литературу дальше, основываясь на сносках в Мартине.

    Хотя, если вы на совсем начальном уровне (что подразумевает ваш вопрос), то вам бы в хороший офис года на полтора-два - там привьют начальные представления о хорошем и плохом, заложат фундамент правильных привычек, а дальше можно уже и за литературу браться, как усвоите основы и набьёте свои шишки.
    Ответ написан
    Комментировать
  • Немного о правильности написания кода. Какой вариант выбрать?

    artemgapchenko
    @artemgapchenko
    Много уровней вложенности плохо читаются. Попробуйте добавить внутрь условия

    if (rulesField.isChecked()) {
        register(numberField.getText().toString(), codeField.getText().toString());
    }

    Ещё парочку вложенных if-else, чтобы получилось вот такое:

    @Override
        public void onButtonClick() {
            if (isRequested()) {
                if (rulesField.isChecked()) {
                        if (canProceed()) {
                             register(numberField.getText().toString(), codeField.getText().toString());
                        } else if (isExtraRequestRequired()) {
                            doSomething();
                         } else if (oneMoreCondition()) {
                             doSmomethingOnExtraCondition();
                         } else {
                              Log.e("Unexpected condition");
                         }
                } else {
                    showMessage(R.string.error_rules);
                }
            } else {
                requestRegister(numberField.getText().toString());
            }
        }

    и вы поймёте, что удерживать в голове ту ветку, которая вам интересна (сначала if, потом вложенный в него else, потом второй if-else из вложенных в else первого if'а) становится решительно невозможно. Поэтому и стараются так структурировать код, чтобы он был "плоским", то есть без вложенности. Это, конечно идеал, и иногда труднодостижимый, но стремиться к нему стоит - человек, который после вас будет читать ваш листинг (а чаще всего это будете вы сами недели через две после того, как вы его написали, и успешно забыли всю структуру), скажет вам спасибо.
    Ответ написан
    2 комментария
  • Изменить дату Calendar в андроиде?

    artemgapchenko
    @artemgapchenko
    calendar.add(Calendar.DAY_OF_YEAR, 10);
    forDate.setText(calendar.getTime());
    Ответ написан
  • Как предотвратить случайный pull-to-refresh при скроллинге вниз?

    artemgapchenko
    @artemgapchenko
    внутри ScrollView есть RecyclerView.
    Зачем? RecyclerView/ListView/GridView не предназначены для того, чтобы их внутрь ScrollView засовывать, у вас из-за этого всё переиспользование дочерних виджетов к чертям летит. Начните с исправления этой проблемы, а потом беритесь за траблу с pull-to-refresh (хотя вангую, что она после исправления первой проблемы исчезнет).
    Ответ написан
    2 комментария
  • Стоит ли продолжать изучать Android develop?

    artemgapchenko
    @artemgapchenko
    Здравствуйте, как многие знают, Google готовит замену Android

    Откуда вы всё это берёте? Есть проект на Гитхабе с таким вот README:

    Pink + Purple == Fuchsia (a new Operating System)

    Всё. Ни про замену Android, ни про предназначение проекта ничего не сказано. К проекту подключено 3 (три) человека, развивается он без году неделя, никаких официальных анонсов не было.
    Прекращайте читать советские газеты перед обедом и вместо первоисточников и не занимайтесь домыслами того, чего нет. Изучайте Android и выбросите Фуксию из головы на ближайшие года два, пока не станет понятно, что это такое и кому это нужно.
    Ответ написан
    Комментировать
  • Где лучше взаимодействовать с view?

    artemgapchenko
    @artemgapchenko
    В методе onPostExecute(). Метод get() блокирует работу потока, вызвавшего этот метод (в вашем случае это будет ui-поток, если вы хотите взаимодействовать со View) пока doInBackground() не закончит свою работу.
    Ответ написан
    Комментировать
  • Как сравнивать дженерики в java?

    artemgapchenko
    @artemgapchenko
    Java это не C++, не Kotlin и не Scala. Перегрузки операторов нет, поэтому сделайте так:
    if (a.compareTo(b) > 0) {
        doSomething();
    }

    В вашем случае MyClass должен имплементировать Comparable<MyClass<T>>, а не Comparable<T>. В compare() можно будет сравнивать между собой x.data и y.data, которые, в вашем случае, являются инстансами обобщенного типа, имплементирующего Comparable. Как-то так:

    class MyClass<T extends Comparable<T>> implements Comparable<MyClass<T>> {
        T data;
    
        MyClass(T data) {
            this.data = data;
        }
    
        @Override
        public int compareTo(MyClass<T> another) {
            return data.compareTo(another.data);
        }
    }
    Ответ написан
    2 комментария
  • Можно ли "перенести" проект Android (.java) на IOS и не переделывать все заново?

    artemgapchenko
    @artemgapchenko
    Никак. Вы или пишите два проекта под разные платформы на нативных для этих платформ языках/фреймворках, или используете кроссплатформенные решения (PhoneGap/IONIC/Titanium и иже с ними).
    P.S. Посмотрите ещё на ответ Дениса Загаевского, тоже хорошее предложение.
    Ответ написан
    Комментировать
  • Сколько всего обьектов создано в коде?

    artemgapchenko
    @artemgapchenko
    Один. v2 - ссылка на тот же самый объект, на который ссылается v1.
    Ответ написан
  • Oracle сертификат(по java) для Android разработчика на Kotlin?

    artemgapchenko
    @artemgapchenko
    Тут есть два ответа.

    1. В каком-то подкасте (возможно это было "Радио Бермудский Треугольник") обсуждали найм программистов, влияние сертификатов на шанс приёма на работу и на последующую зарплату. И ведущие согласились на том, что сертификаты хороши, когда интервьюируемый только вышел из вуза, никакого реального опыта у него, но так как есть сертификаты, то это может быть хорошим поводом к тому, чтобы пригласить на собеседование. Только и всего, больше никаких выгод нет.
    2. На хабре как-то отписывался парень, переехавший в Европу (в Нидерланды, если мне не изменяет память), который получал сертификат (по-моему как раз-таки связанный с Java-технологиями), и говорил, что его работодатель даёт прибавку к за наличие определённых сертификатов. Могу соврать, но вроде бы он так же говорил, что в его городе (стране?) прибавка за сертификаты - распространённое явление.

    Так что определитесь с тем, какую вы выгоду от него хотите поиметь. Если, как написано в комментариях: "Как минимум будет понятно что вы не только на котлине могете" - то не стоит тратить своё время и деньги; вы либо работаете с Java, знаете её, работали над серьёзными проектами сделанными на ней и готовы показать это на собеседовании, или нет, и никакая бумага с печатью вам тут не поможет. Если же вы уже имеете на прицеле работодателя, который даст вам более "вкусные" условия за наличие сертификата, или же у него условия работы одинаково замечательны для всех, но он при этом официально заявляет, что наличие сертификата даёт серьёзное повышение шансов на трудоустройство у него - идите и получайте.
    Ответ написан
    1 комментарий
  • Передача callback'a методу в качестве параметра, нормальная практика или костыль?

    artemgapchenko
    @artemgapchenko
    В вашем коде нет абсолютно ничего костыльного. Запросы в OkHttp выполняются в фоновом потоке (не в главном, в котором работают все компоненты Android-приложения, а в фоновом), соответственно вам нужно как-то прокинуть в OkHttp вашу реакцию на успешное/ошибочное выполнение запроса. Callback'и b были добавлены в OkHttp как способ добавить такую реакцию на данные, получаемые в фоновом потоке.
    Ответ написан
    Комментировать
  • Стоит ли сейчас изучать Kotlin?

    artemgapchenko
    @artemgapchenko
    Начните лучше с Java, мой вам совет. Kotlin очень хорош (я как раз сейчас на нём проект для себя разрабатываю), но смущает меня отсутствие официальной поддержки со стороны Google.
    Мотивация JetBrains в плане адаптации Kotlin к Android понятна - они хотят зайти на рынок языков под JVM через Android-разработчиков, которые давно уже стонут и плачут от Java 6/7. Непонятно, будет ли эта мотивация такой же сильной через пару лет, когда, например, Google определится с тем, что у них будет вместо Java, и определится не в пользу Котлина (если ещё определится, что, скажем так, вилами на воде написано). Или же Бреслав как главный идеолог проекта потеряет к нему интерес. Или же в JetBrains посчитают расходы/доходы, и решат зарезать поддержку Android. Много чего может произойти, а вам потом проект на нём поддерживать.
    Плюс, как правильно отметил в этом треде Денис Загаевский, вакансий мало, и неизвестно, будет ли их больше. А со знанием Java вы себе в обозримом будущем работу Android-разработчика точно найдёте, тут проектов как грязи - выбирай, не хочу.

    Update от 17.05.2017: Google объявил об официальной поддержке Kotlin для разработки под Android, так что теперь точно можно начинать вкладываться в него.
    Ответ написан
    1 комментарий
  • Есть ли мануалы перехода на andoid6?

    artemgapchenko
    @artemgapchenko
    Вам нужно перейти на новую модель разрешений.
    Начиная с шестого Андроида, все разрешения (вернее не все, а только те, которые Google отнёс к "опасным") могут отменяться/добавляться пользователем после установки приложения, соответственно вам нужно будет написать код, который будет проверять наличие этих разрешений, и, если нужно, запрашивать их у пользователя.
    Ответ написан
    Комментировать
  • Что почитать по Gradle на русском языке?

    artemgapchenko
    @artemgapchenko
    Первое, что нам сказали на первой же паре в университете (названия предмета уже не помню, восемь лет назад дело было): "Самый важный для вас язык не C и не Python, а английский". Русская документация всегда будет в лучшем случае отставать от английской, а скорее всего просто будет переводиться мелкими клочками. Поэтому только оригинал, только хардкор.
    Вру. Никакой это не хардкор, освоить английский на уровне "Достаточно для чтения документации" можно очень быстро. Плюс это навык, который точно не устареет, в отличие от Gradle/Android/прочих технологий. Ну и если вы собираетесь переходить на Android, то английский вам точно нужен - подавляющее большинство свежих материалов выходят на английском, документация пишется на нём же, достойные учебники и большинство подкастов выходят на английском, даже известные русскоязычные разработчики, вроде того же Зинатуллина, пишут свои статьи не на русском. Изучайте.
    Ответ написан
    1 комментарий
  • Почему на android 5 размер текста в Textview такой большой?

    artemgapchenko
    @artemgapchenko
    getResources().getDimension() возвращает значение в пикселях, а setTextSize(float size) по умолчанию трактует значение параметра как число scale-independent pixels, и умножает его на соответствующий коэффициент ещё раз. Используйте версию setTextSize(), в которой можно задавать используемый unit.
    tv.setTextSize(TypedValue.COMPLEX_UNIT_PX, getResources().getDimension(R.dimen.reader_main_text));
    Ответ написан
    1 комментарий
  • Какие книги есть по правильному написанию кода, по правильной структуре кода?

    artemgapchenko
    @artemgapchenko
    Ну и раз уж вы задали этот вопрос в разделе "Java", то можно ещё и "Java Code Conventions" полистать.
    Ответ написан
    Комментировать