Задать вопрос
  • Как поддерживать опыт с java на kotlin?

    @Slavon93
    Тут все зависит от того, для чего оно надо. Некоторые говорят, что используя kotlin, используй kotlin, не смешивая с java. На самом деле, все зависит от ситуации.
    Если вы работаете и хотите использовать kotlin в рабочих проектах, то лучше лишний раз уточните, нужно ли его вообще изучать - быть может ваша компания не готова на него переходить и тратить время на его изучение вообще будет лишним. Если же переход возможен, следует уточнить, для каких целей, в каких объемах будет допустимо его использование. Опять же, возможно, основная логика будет на java, а kotlin только в каких-то мелочах. В зависимости от этого и выбирайте, что изучать в первую очередь.
    Если вы для себя, у вас нет проектов ни там, ни тут, лучше изучайте в формате «сначала java, потом kotlin». Многие истории успеха говорят о том, что переход с java на kotlin проходит недели за 2 неспешного чтения доков и книжки, вроде Kotlin in action.
    Вообще, хоть kotlin это и не java, на нем можно писать в стиле java, особенно на первых порах. А дальше, когда изучите его достаточно, можно будет переходить уже и на стиль kotlin.
    Ответ написан
    Комментировать
  • Почему возникает ошибка "'NoneType' object is not callable"?

    @Slavon93
    Никогда ботов не писал, но попробую направить:
    bot.register_next_step_handler(message, IPMO(message, sumresid))

    Вот тут, насколько я понял из документации, вторым аргументом идет callback. Судя по всему, это должен быть указатель на функцию, которая будет запущена, когда придет сообщение. Если вы указываете функцию так, как указали, вы передаете туда возвращаемое значение, а в вашем случае оно будет None, поскольку она ничего не возвращает, соответственно бот будет пытаться запустить None и вы получите ту ошибку, которую получили.

    Если загляните вот сюда (ссылка на Github бота), то увидите,
    # Handle '/start' and '/help'
    @bot.message_handler(commands=['help', 'start'])
    def send_welcome(message):
        msg = bot.reply_to(message, """\
    Hi there, I am Example bot.
    What's your name?
    """)
        bot.register_next_step_handler(msg, process_name_step)
    
    
    def process_name_step(message):
        try:
            chat_id = message.chat.id
            name = message.text
            user = User(name)
            user_dict[chat_id] = user
            msg = bot.reply_to(message, 'How old are you?')
            bot.register_next_step_handler(msg, process_age_step)
        except Exception as e:
            bot.reply_to(message, 'oooops')

    Тут, во-первых, устанавливается callback строчкой
    bot.register_next_step_handler(msg, process_name_step)
    а во-вторых сама функция process_name_step принимает в качестве аргумента message, то есть сообщение, которое было прислано боту, а дальше из него уже берется вся информация.

    Короче, скорее всего, вам нужно в функции func0, как только поняли, что ID больше одного, отправлять пользователю сообщения с информацией о найденных ID и ждать ответа. Когда ответ придет, сработает callback IMP0 с аргументом message, из которого станет понятно, что именно хочет пользователь, а дальше ваша стандартная обработка ответа.

    Ну, и наверное, еще стоит сказать, что лучше было бы, конечно, не спамить кучу сообщений пользователю на каждый ID, а сформировать одно сообщение со всеми найденными ID и отправить пользователю, а дальше уже ждать ответа именно на него, поскольку аргумент message, который идет первым в bot.register_next_step_handler - это, судя по докам, то сообщение, на которое ожидается ответ.
    Ответ написан
    Комментировать
  • Miui и пр. системы основанные от android'а подходят для android разработки?

    @Slavon93
    Ну, во-первых, следует понимать, что MIUI - это тоже Android, просто со своими нюансами. Поэтому, в плане того, подходит оно или нет - да, подходит, но с некоторыми оговорками.

    Первая оговорка заключается в том, что версия MIUI и версия Android, лежащая в ее основе живут параллельными жизнями. Это приводит к тому, что одна и та же MIUI 9.6 на Xiaomi Redmi Note 3 Pro имеет версию 6.0, а на Redmi Note 4 - 7.0. А на более новых телефонах может быть и 8.0. Так что проверки на версию API Android обязательны.
    Второй нюанс заключается в том, что дизайн приложений для MIUI немного отличается от такового, принятого в чистом Android, так что проверять в любом случае придется где-то еще, а не только на Xiaomi.
    Третий нюанс заключается в том, что у Xiaomi есть своя собственная система разрешений, оптимизаций энергопотребления и так далее, поэтому то, что нормально будет работать на обычном телефоне с чистым Android, может работать немного неожиданным образом на Xiaomi, особенно это касается всяких фоновых сервисов, которые запросто могут быть убиты, просто потому что система посчитает, что они тратят энергию, а пользователь не внес приложение в исключения. Аналогичная штука может происходить с Push уведомлениями.

    Таким образом, да, тестировать приложение можно и на Xiaomi, можно и основную разработку на них вести, но лучше параллельно проверять работу и на чем-то еще.
    Ответ написан
    Комментировать