Ответы пользователя по тегу Android
  • Какой язык программирования учить для Android разработки?

    @red-barbarian
    java, а затем kotlin
    это два официальных языка. на них практически все примеры. и документация от гугл.
    java без него нет андроида)
    kotlin - почеловечнее язык. испоьльзует библиотеки(классы) java b его машину. много сахара для удобства и проч. но изучать лучше после java/
    ну еще можно c++ для особых случаев.
    Ответ написан
    Комментировать
  • Как подогнать размер ImageView под размер картинки в ней?

    @red-barbarian
    doc
    <ImageView
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:src="@mipmap/ic_launcher"
             />

    match_parent (fill_parent) – означает, что элемент займет всю доступную ему в родительском элементе ширину/высоту.
    wrap_content – ширина/высота элемента будет определяться его содержимым
    Ответ написан
  • В чём основная концепция использования RxJava?

    @red-barbarian
    RxJava - это библиотека для реализации реактивного стиля в java
    реактивный стиль вещь похожая на более известный функциональный стиль программирования.
    выражается он в следующем
    есть поток данных, мы применяем к нему некие преобразования и получаем новый поток.
    например
    (поток запросов в сеть в виде адресов страниц)-> операторЗапросаВСеть -> ОператорПарсинга-> ОператорФормированияДатаОбъектов ->(отображение на экране)
    Популярность в андроиде, думаю, приобрел за счет простоты работы с многопоточностью. По крайней мере первые примеры применения в андроиде rx обычно про это.)
    вообще, это немного другой способ мышления. отличный от процедурного и ооп.
    есть источник, есть получатель и много преобразований.
    источник это observable, получатель это subscriber/observer . преобразования это разного рода операторы или их цепочки.
    В этом случае мы понимаем приложение как нити потоков данных. такая схема бывает проще чем схема из объектов. иногда.
    конечно, мы можем применять и гибриды из этих парадигм.
    вообще, это стоит попробовать. возможно она очень вам близка по стилю вашего мышления.
    Ответ написан
  • AsynTask или Thread?

    @red-barbarian
    В отличии от FX тебя ждут неожиданности в виде пересоздания Активити при поворотах экрана (например). А соединение вероятно ты хочешь держать открытым. Поэтому изначально желательно разбить приложении на части.
    часть пересоздаваемая при поворотах - это активити
    часть независимая (неубиваемая) это всякого рода синглтоны. Для твоего случая что-то что будет предоставлять данные. Назовем его провайдером. Время должно не зависеть от активити.
    Далее дабы оформить нотариально разделение отображения данных и выкачку из нет - делаем интерфейс - контракт, договоренность по которому активити будет получать данные, а провайдер предоставлять. Данные уже готовые к отображению в активити . Контракт назовем репозиторием. Реализация репозитория - то что предоставляет готовые данные - repositoryImpl.
    На этом этапе можно подправить и FX проект. В идеале получиться все что до репозитория (сеть и прочее) - будет общее для двух проектов, после (UI) разное.
    Итого получается слои
    net/provider - repository - activity.
    далее ввиду сюрпризов (выше сказанных ) активити и нехорошей тенденции разрастания логики в активити ее желательно разделить используя такие шаблоны как MVP или MVVM. Для этого есть готовые библиотеки например Moxy или Android Architecture Components (ViewModel). Они позволяют разделить логику (разгрузить активити) и сохранить данные от уничтожения при пересоздании активити.
    Итого получается (например с MVP):
    net-provider-data-repositoryImpl
    ----------------------
    repository
    ----------------------
    presenter
    View (активити)
    презентер при создании запрашивает данные из репозитория и асинхронно получает их. после получения отображает их в UI
    Все что выше репозитория живет дольше активити/фрагментов. Поэтому держит соединение столько сколько нужно. Все это можно написать как отдельную часть независимую от android ил FX. Работать оно должно не в главных потоках (UI android или UI-FX). Как это реализовать - неважно. Можно вызывать из презентера AsyncTask. Благо презентер не будет убиваться. Также можно добавить в этот слой кеширование. (что бы запросы лишние не слать)
    примерно так)
    если логика приложений схожа, то можно к репозиторию добавить классы бизнес логики. тогда эта часть также будет независима от устройств.
    написано много и сумбурно, но на деле это просто разбиение на слои.
    Ответ написан
  • Как пережить Lifecycle?

    @red-barbarian Автор вопроса
    Вероятно, самые популярные решения (почти из коробки) это
    Moxy
    а также гугловское решение Android Architecture Components
    Ответ написан
    Комментировать
  • В каком классе писать код для взаимодействия с кнопкой?

    @red-barbarian
    Какой именно код?
    Если повесить просто обработку клика, то можно в onCreateView. Если что-то сложное - т.е. взаимодействие со сложной бизнес логикой и использование данных из модели , то использовать паттерн MVP. Если взаимодействие между фрагментами, то в активити.
    Ответ написан
    Комментировать
  • Как сделать пагинацию Jsoup Android?

    @red-barbarian
    вероятно, вы хотите:
    1) присоединить к listview адаптер
    2)на myListView.setOnScrollListener повесить запуск AsyncTask
    3)AsyncTask загружает контент, парсит и возвращает список.
    4) onPostExecute(List result){adapter.clear(); adapter.addAll(result); adapter.notifyDataSetChanged()} - заменяем данные и сообщаем адаптеру что сделали.
    1), 2) в onCreate
    3),4) в AasyncTask
    Ответ написан
    2 комментария
  • Как указать контекст (или обойтись без него) при вызове метода в паблик классе (не активити)?

    @red-barbarian
    Использовать getApplicationContext
    Получать его как говорили в конструкторе или как синглтон из application сделать. Application живет дольше вьюх, поэтому уменьшается риск утечек памяти.
    Ответ написан
    Комментировать
  • Какой параметр Bitmap нужно указать в методе для сохранения изображения?

    @red-barbarian
    Например, если из ресурсов, то BitmapFactory.decodeResource(getResources(), r.drawable.id)
    Вообще (то что Вы написали) для сохранения bipmap которая в память на долговременную память, в файл imageName
    Ответ написан
  • Почему не срабатывает обработчик кнопки Android?

    @red-barbarian
    https://developer.android.com/guide/topics/ui/dial...
    Хорошо описано про диалог. Также там описано что не нужно делать диалоги, а использовать fragment dialog.
    И что у Вас в 44 строке? Там null. Из нее ошибка.
    Ответ написан
    Комментировать
  • Как отлавливать выход человека из приложения?

    @red-barbarian
    строго говоря говоря в андроиде не выходят из приложения. приложение прибивает система в зависимости от приоритета. начиная от пустых, затем те которые скрыты , те которые с сервисами и т.д.
    пустые это те у которых уже нет открытых активити, но приложения еще висят.
    т.е. при закрытии всех активити не факт что приложение закроется. и при сокрытии активити не факт, что ее не прибьют что бы освободить память без завершения.
    Возможно выход сделать кнопку "exit" для пользователя на которую повесить обработчик и закрытие активити.
    Ответ написан
    Комментировать
  • Android обмен данными с сервером, Socket или httpurlconnection?

    @red-barbarian
    ну во-первых нужно определиться с протоколом. будете ли вы делать свой протокол обмена клиент-сервер или возьмете http.
    http это уже стандартный протокол со всеми вытекающими. и хорошим клиентом для андроида.
    свой протокол - все ваши желания. но делаете сами.
    кроме этого нужно учитывать что готовые клиенты http уже готовы для сжатых данных, для работы с REST. для cache. Для них уже сразу можно работать с Retrofitom & json (Gson), либо распарсить самому.
    Конечно же для http уже готовые сервера. остается сделать только ответы-скрипты.
    Кроме этого часто в какой-либо корпоративной сети админ запрещает все кроме mail & http.
    Т.е. плюсов достаточно много.
    Но у http это работа клиента с сервером по запросам. те. клиент послал запрос - получил ответ. Сервер просто так не посылает свои данные клиенту.
    Если для вас это важно то http не подойдет.
    Ответ написан
    Комментировать
  • Как удалить папку с внутреннего хранилища после удаления приложения, например как это делает Телеграмм?

    @red-barbarian
    https://developer.android.com/training/basics/data...
    Личные файлы
    Это файлы, принадлежащие вашему приложению. Они должны удаляться при удалении вашего приложения пользователем. Хотя технически эти файлы доступны для пользователя и других приложений, поскольку находятся во внешнем хранилище, они не имеют никакой ценности для пользователей вне вашего приложения. Когда пользователь удаляет ваше приложение, система удаляет все файлы из каталога закрытых файлов вашего приложения во внешнем хранилище.
    Например, к этой категории относятся дополнительные ресурсы, загруженные приложением, и временные мультимедийные файлы.
    Ответ написан
    Комментировать
  • Как получить ответ от сервера, что пользователь существует в бд?

    @red-barbarian
    можно двумя способами
    через ответ response.body(). что-то специфичное
    и через код ответа сервера response.code()
    нужно учитывать что isSuccessful() это коды 200-299
    так же желательно проверять в ответах isSuccessful(). Мало ли что.
    для размышлений www.restapitutorial.ru/httpstatuscodes.html
    Ответ написан
  • Static Handler в активности приводит к утечке памяти?

    @red-barbarian
    если MainActivity
    не должен если при onCreate handler заменяете.
    можете еще в onDestroy сделать handler = null
    Вообще, проверяйте. Хотя бы мониторьте память при поворотах экрана.
    Ответ написан
    Комментировать
  • Как использовать одно активити с одним ListView для многих array?

    @red-barbarian
    По нормальному нужно разделить слой вьюшек и слой данных. Хотя бы примитивно.
    Т.е. сделать Activity1, Actyvity2 и некий класс который будет предоставлять данные. Например назовем provider.
    Итог.
    Activity1 заполняется списком provider.getList1()
    при выборе элемента 1 вызывает Actyvity2, бросая через invent item1
    При запуске Activity2, вытягиваем item1 из intent, и заполняем listview списком provider.getList2(item1)
    идея - активити отдельно, списки отдельно.
    Также можно рассмотреть не старты активити, а использовать фрагменты. Но конечно, если задача позволяет.
    Ответ написан
  • Какие концепты/бест практисы нужно учесть при разработке Android приложения?

    @red-barbarian
    часто используются dagger, butterknife, rxjava, retrofit, okhttpclient и проч. про перечень уже писали. (были вопросы)
    про использование библиотек. философский вопрос. но можно посмотреть с такого ракурса. сейчас пользователь не особо смотрит на пару мегабайт лишних в приложении. но из-за того что вы не знаете насколько популярно будет ваше приложение (выстрелит или нет) вам нужно экономить ваше время и стараться делать код изначально качественным (готовым для изменения). Использование сторонних библиотек сильно экономит время. важно не только написание некой функции, но и оттестировать ее. для конечного пользователя, думаю, приоритет стабильность работы. для вас эффективность труда. размер это не главное.
    после первого выпуска станет ясно над чем работать. и стоит ли.
    Ответ написан
  • Код ревью неофициального приложение для тостера?

    @red-barbarian
    1. ревью (инспекция кода) не бывает без ругательств. Есть закон от небожителей "качество кода измеряется количеством ругательств которые извергает читающий". Т.е. обратно пропорционально. А значит никогда не равно 0. )))
    Поэтому, не верить когда говорят что все хорошо и идеально. Значит не вникли.
    Не верить, когда говорят что все г..но. Или что-то г-но. Прислушиваться, но не верить. Это так философское отступление)
    2. Исследовать рынок нужно до написания. До начала. Или после. Нельзя делать это во время первого выпуска. Иначе, можно потерять интерес к написанию. К самому выпуску продукта. Исследование не факт, что покажут реальные результаты. А продукт будет не выпущен. После выпуска можно узнать как улучшить продукт или чем дополнить. Повторюсь, не делать это во время подготовки первого выпуска.
    3. Уже писали ГитХаб. Постараться сделать работу людей удобнее. В том числе тех кто проверяет Ваш код. Поверьте это того стоит.
    4. Философский вопрос открывать или не открывать код. Если хотите научиться писать открывайте.

    По коду. Поверхностно. пример QuestionFragment
    Есть библиотеки которые улучшают код. например ButterKnife. они простые, но код понятнее (короче).
    Ссылки на url лежат в методе getHttp очень не удобно. Думаю лучше разделить текстовые ссылки в одно место, построение и выполнение запроса в другое (общий случай) . получение данных в третье. Постараться придерживаться принципа единственной ответственности. Что бы сделать код проще.
    Фрагмент содержит как отрисовку, так и бизнес логику (логику работы приложения). Так загромождается код. Получается огромные запутанные классы. Посмотрите шаблон MVP. Им можно упростить код. Даже сильно.
    Насколько я понял, при переворачивании экрана идет считка заново данных. Это не хорошо. Даже если кешируется запрос. Используйте например MVP + Dagger2
    (еще одна модная, вернее, уже традиционная библиотека)

    Можно смотреть
    Loader (загрузка данных)
    RxJava (работа например с ретрофитом, потоками-нитями, и проч проч. очень полезная)
    SOLID (принципы. для того чтобы сделать код гибче и понятнее)

    Пытаться разбивать программу на независимые компоненты которые можно переиспользовать.

    Не воспринимать мои слова как абсолютную истину. Большого опыта написания андроид-апп нет. Но если есть желание выслушивать критику напишите мне в например в vk.
    Вообще, удачи Вам с проектом.)
    Ответ написан
    Комментировать
  • Почему вылетает приложение Android при переходе на новое Activity?

    @red-barbarian
    потому что в макете R.layout.activity_calc есть кнопки у которых в поле onClick описан метод которого нет в ActivityCalc.
    ищите ошибку в activity_calc.xml
    Ответ написан
    Комментировать
  • Как выровнять элемент RecyclerView по правому его краю?

    @red-barbarian
    Все работает. Все правое.)
    Вообще, все делается так:
    делаем макет элемента RecyclerView.
    например
    <LinearLayout ...>
     <CardView>
    <TextView />
    </CardView>
    </LinearLayout>

    т.е. лайаут , внутри карточка, внутри текст (или элементы и др layout)
    Затем на основе элементов (R.id.text_view) делаем свой ViewHolder - элемент которые будет показывать наши данные.
    Затем на основе макета элемента и данных делаем свой Адаптер. в котором описано создание ViewHolder - ов, и их связывание с данными.
    Затем при создании (инициализации в onCreate) мы устанавливаем LayoutManager для Recycler
    Т.е.
    Если мы хотим Recycler - строки на всю ширину экрана одна за одной сверху вниз, то
    наш элемент
    будет иметь
    высоту warp, ширину match
    В редакторе мы его так и увидим.
    Recycler это изображение клонирует и подставляет данные.
    Замечание. старайтесь Уменьшать количество Layout в макете. Часто можно несколько заменить одним, например RelativeLayout. Это сильно увеличит быстродействие.
    Ответ написан
    Комментировать