Это копия, сохраненная 13 сентября 2016 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Алсо, первый месяц на новой работе прошел довольно потно.
Предыдущий тред тут:
https://2ch.hk/pr/res/801015.html (М)
Коротко о главном:
1) Мобильная разработка - это весело.
2) Android Studio & Java - легитимный набор, проверенно временем и поддерживается гуглом.
А также о неглавном:
3) PhoneGap/Ionic/Titanium/ReactNative - имя им javascript, принципы у них разные, первые три попытка в кроссплатформенность одного кода, ReactNative проповедует другой подход, а именно написание разного кода но на одном языке. Популярность у них разная как и размер комьюнити.
4) Xamarin - мультиплатформенная разработка. Попытка серебряной пули на C#. Довольно популярный. Куплено Microsoft. Теперь есть бесплатная версия.
5) BugVM (RIP RoboVM) - идейный наследник ксамарина, а теперь уже и его часть но на Java. Учитывая что Microsoft убила RoboVM, встречаем опенсорсный BugVM.
Отдельного упоминания стоят:
1) Kotlin - Java от JetBrains, новый и стильный язык, куча синтаксического сахара прилагается, есть стримы и делегаты. Хотите писать на котлине? Добро пожаловать в JetBrains и Avito.
Где брать инфу:
Интернет-ресурсы
1) http://developer.android.com/index.html
Наша библия. Документация/небольшие примеры/гайды. Но только на инглише, но это плюс. Минус в том, что это все таки документация с небольшими примерами и гайдами и искать там реализацию чего-то хоть немного сложного нету смысла. Раздел Training как раз для старта.
2) http://stackoverflow.com/
Пользуюсь чаще чем первым сайтом. Можно найти практически все.
3) Есть два вполне вменяемых русскоязычных ресурса. Для старта подходят очень даже.
http://startandroid.ru/
и
http://developer.alexanderklimov.ru/android/
Второй еще и условно бесплатный. Главный плюс - это русский язык, простые гайдики, но переводы классов иногда заставляют фейспалмить.
4) http://habrahabr.ru/ - редко но метко, можно найти годные статьи по каким-то реализациям, или переводы с developer.android. Хотя чего тут объяснять.
5) https://www.udacity.com/ - в треде очевидцы говорили что есть годный курс, но я лично не смотрел.
Книги, их никто не читает, но все советуют только одну
1) The Busy Coder’s Guide to Android Development - в отличии от остальных книг она обновляется, а так как ведро не стоит на месте а хуярит семимильными шагами, то я бы и не советовал другие книги.
А теперь, так как заебали уже всех, гайд для:
>"Я хуярил на делфи 5 лет назад а теперь хочу вкатится в андроид":
Чтоб быстро хоть как-то вникнуть в джаву берешь и гуглишь javarush или codingbat.com.
Можно Эккеля "Философия java" почитать.
Или Хорстманн "Java. Библиотека профессионала" до 7 главы.
Что тебе нужно понять в самой жабе.
Энтри лвл.
1) ООП - сам принцип нужно именно понять, так как ооп язык.
2) Типы данных. Примитивы и ссылочные.
3) Структуры данных - Массивы/коллекции - без них никуда. Полезно почитать про алгоритмы работы коллекций и их сложности.
4) Дженерик типы, они как раз юзаются в коллекциях.
5) Классы/интерфейсы и все вытекающие.
Уже можно быдлокодить потихоньку и учить андроид параллельно с тем что ниже.
Дальше
6) Потоки ввода/вывода (streams). Не путать с тредами(threads).
7) Threads, особо не нужно вникать(в java.util.concurrent можно не лезть, в ведре все равно особо не пригодится), но нужно понять как работает многопоточка и что такое Runnable.
8) Прочитать про паттерны что-то. Начать с listener, adapter, singleton, iterator так как на каждом шагу. Ну и по накатанной.
Уже сделаешь что-то нормальное.
Дальше.
9) Работа с Sqlite, нужна будет в любом случае.
10) Работа с json.
Привет клиент-серверка.
Пишите в треде что добавить
Я охуеваю, дорогая редакция. Неужели Гугл не смог сделать вменяемый инструмент разработки, который способен запуститься и работать после установки?
Установил я этот Android Studio - он после создания проекта-сэмпла начал выдавать какоё-то gradle family unavailable. Оказалось, что это надо лечить установкой какого-то флага для Java (охуеть, как будто сами не могут его передать в Java).
Ладно, это сделано - но теперь там следующий уровень ебанизма - невозможность запуска и хз из-за чего:
Execution failed for task ':app:transformClassesWithDexForDebug'.
> com.android.build.api.transform.TransformException: java.lang.RuntimeException: com.android.ide.common.process.ProcessException: java.util.concurrent.ExecutionException: com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command 'C:\Java\jdk1.7.0_79\bin\java.exe'' finished with non-zero exit value 1
Код покажи. Мы же не экстрасенсы тут.
На крайняк - попробуй в коллбэке после прилета данных(который, наверное, выполняется в основном потоке, так?) не просто обновлять данные и вызывать notifyDataSetChanged(), а постить Runnable в Handler, который связан с Main Thread Looper. Например, создав этот Handler в главном потоке, или же создав его где хочешь вот так:
Handler handler = new Handler(Looper.getMainLooper());
То есть, например, у тебя будет что-то такое:
http://pastebin.com/L28mYi9Q
}
Ну и то, что я предложил - это все-таки хак, тебе нужно проверить свой код, там точно есть какая-то хуита(но есть и шанс, что гуглолибы глючат).
Ну и я бы советовал смотреть, для какой строки ты принимаешь данные. То есть если вдруг у тебя отправились запросы сначала для "2ch" и потом для "2ch.hk", то может случиться так, что ответ для 2ch.hk придет раньше, а для "2ch" - позже. Поэтому сравнивай данные, которые получаешь с теми, которые хочешь получить.
>>814754-кун.
Через WINE
Хейтеры буду наказаны.
gcc hello.c -o hello.exe
Посмотри Firebase, мне кажется, что тебе подойдет. Если вкратце - ты можешь на сервере сохранять данные в виде дерева объектов.
Там No-SQL, если не ошибаюсь. Думаешь, хранить до тысячи объектов будет удобно?
> Думаешь, хранить до тысячи объектов будет удобно
Хранил там 3000 объектов. Отказался из-за того, что обновляется фаирбейз дольше. 1 мб сети + куча обработки, а с собственным сервером 100кб gzip json.
Но к своему серверу надо ещё аутентификацию прикручивать
Пошел нахуй со своим говном.
Пошел нахуй, говна кусок.
Да, типа того.
Тестерам Android Studio нужно выдернуть руки. Или просто отрубить их с корнем. Как можно выпустить настолько глючный продукт, да ещё и рекомендовать его как основное средство разработки, я не представляю.
Тогда он еще больший долбоёб. Ставит превью-версию и чему-то там возмущается.
Короче думаю здесь найдётся кто-нибудь, кто пояснит за MVP.
Желательно в виде ссылок на какие-нибудь хипстерские медиумы и чтобы их потом прикрепили к ОП-посту. Ну про медиум шучу, хотя он основной источник всего этого шума.
Я просто часто слышу MVP в контексте андроида и сам по сути понимаю, что активити как god-object по сути плохо. Но штука в том что по всей видимости никаких фреймворков, либ и даже просто шаблонов проектов нет. Типо есть упоминания о презентере, а кто как его делает - это дело личное (даже в прошлом треде анон сетовал про организацию своей архитектуры).
Ладно, допустим, кто-нибудь даст ссылку про то что вот один чел сделал у себя в проекте каким-нибудь определенным образом. Но у меня проблемы уже в самой терминологии. Модель - тут более менее ясно - вся логика, которая выносится и не зависит от андроида - должна быть вынесена. Правда вот где совершать чтение файлов и баз данных, если для этого нужен контекст - наверное инициализировать модель с помощью аплекейшен контекста.
Далее Вью - это активити? Или вью - это делать свои кастомные лейауты на каждый чих и в них завязывать логику отображения?
И самое неясное презентер. его соотношение один презентер к одной активити? какие задачи он обычно выполняет?
При этом всём наверное ещё используется дагер, чтобы сложнее было найти что где вызывается. И юнит тестам поддаётся только модель? которой передаётся на вход замоканный контекст, файлы, бд и проверяется, что, к примеру, возвращаемый столбец соответствует замоканному?
Тебя в гугле забанили? На каждый твой вопрос есть ответ в гугле. А делают всё равно все по-разному. И будут дальше так делать.
> Но штука в том что по всей видимости никаких фреймворков, либ и даже просто шаблонов проектов нет.
Ну реально в гугле забанили.
Бля мне просто хочется пожевать риторического говна типа
> А делают всё равно все по-разному. И будут дальше так делать.
(Насколько по-разному?) Ну просто знаешь хочется немного общения и реального опыта простых пацанов с двача - люди же сюда за этим и заходят. Независимо от раздела.
От статеек с хабра подустал чуток - чисто много текста из разных источников ради кармочки. Ну ладно зачастую там реально неплохая отправная точка.
Ладно ок берём рандомную ссылку (одну из первых).
https://github.com/konmik/konmik.github.io/wiki/Introduction-to-Model-View-Presenter-on-Android
> View is a layer that displays data and reacts to user actions. On Android, this could be an Activity, a Fragment, an android.view.View or a Dialog.
Ну всё что даёт андроид - это вью. Ок.
>Model is a data access layer such as database API or remote server API.
Видимо набор статик методов, чтобы открывать файлики и там например скачивать странички в стринг.
> Presenter is a layer that provides View with data from Model. Presenter also handles background tasks.
Ну и всем оставшимся заведует презентер. Видимо это, что называется, логика.
Всё так, анон? Взаимосвязь вьюхи и презентера в одну и в другую сторону? Если элемент списка в бд изменился, то происходит notifyItemChanged, заранее зная про адаптер или присылается новый список и происходит полное обновление вьюхи?
Хах, ладно, в общем-то я уже заебался...
Короче можешь ответить за тестирование хотя бы. У меня большинство функций воид и вызываются андроидом. А те, которые более менее чистые - private (ну серьёзно, когда более менее логика накапливается выношу в приватный метод). Мне интересно - неужели у других нормальный воркфлоу, что такого дерьма изначально не накапливается.
Или более существенный вопрос - скачиваю xml и паршу в объекты. Мне бы хотелось заранее протестировать парсер, хоть это и внешняя либа, но кто-знает правильно ли аннотации расставлены. Понятное дело, что меня никто не остановит проверить парсер на локальном файлике. Но норм ребята же так не делают? да и в какую папку кидать файл?
А вообще если я тебя конкретно так бешу, то просто нахуй пошли. Я на дваче редко засиживаюсь.
Бля мне просто хочется пожевать риторического говна типа
> А делают всё равно все по-разному. И будут дальше так делать.
(Насколько по-разному?) Ну просто знаешь хочется немного общения и реального опыта простых пацанов с двача - люди же сюда за этим и заходят. Независимо от раздела.
От статеек с хабра подустал чуток - чисто много текста из разных источников ради кармочки. Ну ладно зачастую там реально неплохая отправная точка.
Ладно ок берём рандомную ссылку (одну из первых).
https://github.com/konmik/konmik.github.io/wiki/Introduction-to-Model-View-Presenter-on-Android
> View is a layer that displays data and reacts to user actions. On Android, this could be an Activity, a Fragment, an android.view.View or a Dialog.
Ну всё что даёт андроид - это вью. Ок.
>Model is a data access layer such as database API or remote server API.
Видимо набор статик методов, чтобы открывать файлики и там например скачивать странички в стринг.
> Presenter is a layer that provides View with data from Model. Presenter also handles background tasks.
Ну и всем оставшимся заведует презентер. Видимо это, что называется, логика.
Всё так, анон? Взаимосвязь вьюхи и презентера в одну и в другую сторону? Если элемент списка в бд изменился, то происходит notifyItemChanged, заранее зная про адаптер или присылается новый список и происходит полное обновление вьюхи?
Хах, ладно, в общем-то я уже заебался...
Короче можешь ответить за тестирование хотя бы. У меня большинство функций воид и вызываются андроидом. А те, которые более менее чистые - private (ну серьёзно, когда более менее логика накапливается выношу в приватный метод). Мне интересно - неужели у других нормальный воркфлоу, что такого дерьма изначально не накапливается.
Или более существенный вопрос - скачиваю xml и паршу в объекты. Мне бы хотелось заранее протестировать парсер, хоть это и внешняя либа, но кто-знает правильно ли аннотации расставлены. Понятное дело, что меня никто не остановит проверить парсер на локальном файлике. Но норм ребята же так не делают? да и в какую папку кидать файл?
А вообще если я тебя конкретно так бешу, то просто нахуй пошли. Я на дваче редко засиживаюсь.
> konmik github
На этого долбаеба забей, у него там говно, а либа его еще большее говно. Почитай у mosby гайд.
Вот у нас есть Component, который мы успешно сбилдили в Application.onCreate. Как этот компонент правильно передавать в активити/презентеры?
Если с активити более менее ясно, там в onCreate всегда можно вытащить getApplication и ему сделать метод getComponent, то как быть в презентере? Делать статик геттер апликейшону? Уебанство же.
Создаешь презентер через DI, нужный компонент добавляешь в параметры контсруктора.
DI при создание презентера туда сам передаст нужный компонент.
>А если презентеры создаются через либу (mosby, moxy)?
Что это за фигня и зачем через них создавать?
Был бы очень благодарен.
Мог бы и загуглить.
Хозяин, а если этот колОр?
https://www.youtube.com/results?q=installing+android+studio+from+scratch
Ничего никогад не меняется.
1) Скачиваешь oracle jdk с сайта oracle, устанавливаешь прописываешь в PATH если за тебя это не сделал твой установщик/менеджер пакетов, проверяешь;
2) Ставишь Ведроид студию с SDK, пакеты для каждого свои очевидно, но если это линукс/винда то надо обязательно драйвера. Лично я ставлю несколько последних Android Build Tools, последние Android SDK Platform-Tools и Android SDK Tools, не превью конечно же. Для каждой платформы под которую разрабатываю SDK Platform, ну и конечно из экстрасов кучу всего.
3) Genymotion елси тебя не устраивает стандартный эмулятор/телефоны меня устраивают;
4) libGDX все просто - у них свой инсталятор, взял и поставил.
Джава сама подхватится, если нет, то ты знаешь где она лежит и прописать ее для студии не составит труда. Возможно потребуется добавить в path и что-то андроидовское, что бы студия подхватила.
>прописываешь в PATH
https://developer.android.com/studio/install.html
>add a new system variable JAVA_HOME that points to your JDK folder, for example C:\Program Files\Java\jdk1.8.0_77
JAVA_HOME не достаточно? Надо и в PATH, где javac сидит?
>JAVA_HOME не достаточно? Надо и в PATH, где javac сидит?
Тебе так сложно добавить и проверить? Ты видишь что бы там писалось ДОБАВЬТЕ JAVAC_HOME?
Открываешь консоль и пишешь туда "java -version". В студии можешь открыть File -> Project Structure и там сразу будет видно пути к сдк и jdk.
Короче, прописать как JAVA_HOME, вроде, достаточно. В PATH я не прописывал. javac -version в консоле не вызывается
проверю дома, посмотрев видосах, куда давить и вообще
Да успокойся ты, даун. У всех всё работает. Хватит тред засирать.
Конкретно в nucleus нет поддержки вьюстейта из коробки. С учетом deprecated getView, его приходится оборачивать null чеками и //noinspection deprecation из-за того, что его restartable говно вообще не подходит для неасинхронных операций в стиле: нажал кнопку -> вызвал презентер -> презентер сказал вьюхе переименовать кнопку, и приходится либо прокидывать вьюху параметром, либо получать удовольстивие от зачеркнутого и разукрашеного желтым кода.
> Do not try to make your Presenter control your View
Ну и у он охуительно затирает, что вьюха что-то да должна сама решать, а не быть просто вьюхой, поэтому он и сделал этот убеанский механизм restartable.
> But when control goes like this: user -> view -> presenter -> view -> presenter -> model -> data, it is just violates KISS principle
Кококо нарушение КИСС. Простейший пример. Начать по кнопке загрузку и показать прогресс бар.
Как должно быть: buttonClick -> presenter.load -> view.showLoading, но он затирает, что так делать неправильно, и вьюха сама должна решить, переходить ей в showLoading или нет, хотя это явно отвественность презентера.
> Взаимосвязь вьюхи и презентера в одну и в другую сторону
Зависимость только в одну (вьюха от презентера), а так они друг дружку по очереди вызывают.
> Если элемент списка в бд изменился, то происходит notifyItemChanged
И как ты это словишь? У тебя курсор полностью ресетится если меняется один элемент запроса.
> Но норм ребята же так не делают
Хули нет то?
Это если ты полностью network service тетируешь, то да, ты мокируешь сетевой вызов как "норм ребята". А когда у тебя цель тестирования только парсер то почему бы и нет?
Вот теперь действительно аргументированно.
>неасинхронных
Что-то прям с подливой проиграл с этого.
Вообще со своим ариксом обезумели нахуй. Даже значения слов уже не понимают.
Что тебя не устраивает, даун?
В посте ни слова про rx. Или для тебя асинхронные операции только через него делаются?
Просто он даун.
Ничего. Как пример:
lateinit var presenter: Presenter
И это подчеркивание везде у этого поля, а когда в строчку несколько обращений к такому полю то пиздец глаза вытекают.
Если ты про это (пик 1), то так подчеркиваются любый изменяемы объекты (свойства, переменные и тд).
Отключается в настройках темы (пик 2).
Хотя это ведь не спроста. В котлине более идиоматично использовать immutable свойства и переменные.
И "плавающих" ошибок меньше будет из-за хранения изменяемого стейта.
Вот как чувствовал, что тот даун и котлинофаг - это одно лицо. Так и оказалось.
На хабре есть нормальное описание MVP, где все разжевано более чем достаточно...
Линк: https://habrahabr.ru/post/278815/
Настолько MVP, что у них модель через ивент-бас с представлением общается.
Десять MVP из десяти просто
Бывает такое, что код ведет себя не адекватно в определенном классе, будто его изменения не влияют на работу? Потом ты удаляешь апп, ребилдишь и все встает на свои места?
Я уже который раз трачу время в пустую, когда нужно почистить прост :)
Бывает.
Да, ресурсы пропадают, и падает с БЭД НОТИФИКЕЙШОН. Все этот инстант ран, чего не сделаешь ради быстрой сборки.
То что ты там выгружаешь скорее всего не помогает, так как инстант ран разбивает на несколько дексов, и что-то в результате херится так как он думает что все будет ок. Но это елси много изменений сразу замутить.
Да
Есть какое-то мосби, и ему подобные решения.
С лоадерами, файлами и т.д. - это пихают уже в зависимости от реализации либо отдельно, либо в презентер, либо во активити/фрагмент.
Советую определиться с тем, что ты хочешь. Разные реализации хорошо подходят под некоторый круг задач. Топового решения нет.
Алсо, многие юзают мвп чисто для разделения логики.
Накатил рут, скачал гейгвардин, но что то нихуя не получается хакать игрули. Нечетким поиском нахожу какие то значения, но что с ними дальше делать чтобы стать бохатым не пойму.
ШТОБЕ ГУГЛ МНЕ ВСЮ ПАРНУХУ УДАЛИЛ И В ПЛОНШЕТ НИЗАХОДИЛО!?!?!?!?
фридом требует аккаунт гугля, лакипатчер на то и лаки что не всегда выходит. Плюс, есть игрули в которых нихуя доната нету, но читерить в них хочется.
<LinearLayout...>
<FrameLayout...
android:id="@+id/fragmentContainer">
<ImageButton.../>
<ImageButton.../>
<ImageButton.../>
</FrameLayout >
</LinearLayout >
и примерно такой код:
public void onClick(View v)
{
...
transaction= fragmentManager.beginTransaction();
transaction.replace(R.id.fragmentContainer,fragments[color]);
transaction.commit();
}
Результат на картинке: фрагмент рисуется поверх кнопок.
Как сделать, чтобы кнопки рисовались поверх фрагмента?
Вынеси fragmentContainer в отдельный framelayout
|FrameLayout|
-|FrameLayout (@+id/fragmentContainer)|
-|LinearLayout|
--|ImageButton|
--|ImageButton|
--|ImageButton|
Спасибо, попробую
Еще раз спасибо, заработало!
> отправки файлов метров по 50-100 по http без outofmemory
FileInputStream
> Я использую multipart
Через что ты отправляешь (URL, Retrofit, HttpClient)?
Отправки куда? Тот же твиттер с фейсбуком таки поддерживают твой способ, в котором нужно указыват байтовые смещения.
А этот некий сервер сервер поддерживает такой аплоад чанками?
Да и вообще проще код показать.
чанки, точно. Вот в какую сторону надо гуглить...
>>817057
код такой
http://pastebin.com/ZPXLGjic
на чём разрабатывать, если все ide на java -ресурсоёмкое тормознутое говно?
Попробуй в Atom или VIM, собирать один хрен в конце придется через gradle.
Так же разработку "бизнес слоя" можно вынести в отдельном java-se модуль
и проверять правильность юнитестами, выполняемыми на дексктопной java.
Дядя Боб скажет "молодца".
Подключи ретрофит и отправь через него, должно работать норм. Или ручками через okio.
Не работай с ImageButton. Нахуй она тебе нужна? Что ты подразумеваешь под "спокойно работать"? Загрузить (+ трансформировать) картинку без еботни в ImageButton можно так же как и в ImageView.
загружать картинку для кнопки какой-то маразм
конечно на нашей: заоблачные системные требования java ide не удовлетвворил. На заоблачность требований всем похуй.
>This method is used to enable streaming of a HTTP request body without internal buffering
Буффер съедал всё память
Если будут разные компоненты, то синглтоны же будут синглтонами на компонент или на все приложение?
Повторяю вопрос. Что для тебя есть в ImageButton'е такого, чего нет в ImageView?
Сделать разные активити? Чет слабо верится что это все у тебя через дровер связано, а если связано то нахуй такой дизайн.
Просто объяви тулбары внутри фрагментов, а активити сделай NoActionBar
Два круда с некоторым функционалом и один дёргающий данные из рест апи и показывающий картинки в gridview.
Заебали, довёл до определённой логической стадии и видеть их не могу. Решил отдохнуть от практики и подучиться немного.
Какие мастхэв скиллы должны быть у джуниора?
Из того что точно ещё не использовал/не знаю: ContentProvider, Loader, анимации, датчики, камера, микрофон, карты. Не использовал почти никаких либ, хотел бы разузнать зачем и куда применить хуиту типа dagger, rxjava, event bus.
Хотел бы попробовать MVP или чистую архитектуру, но в туториалах везде куча библиотек используется, да и не знаю надо ли мне всё это на данном этапе.
Короче, куда мне сейчас податься? Есть пару туториалов по библиотекам и MVP, есть курсы на юдасити, есть гайды в Busy Coder’s Guide.
А что, этого хватит на джуна? В хохлостране сейчас не оче с вакансиями, боюсь никто не возьмёт меня такого как сейчас.
Энивей, я смогу на фуллтайм пойти только начиная с октября, поскольку есть некоторые дела ИРЛ. Вот думаю до этого времени скилл поднять.
>только начиная с октября, поскольку есть некоторые дела ИРЛ
Иди лучше к перездачам готовься, а то в котле придется джинуть
Я уже давно выкатился из шараги и меня могут призывать в любую секунду
Зарепорил промытого дауна.
Что твоя мать шлюха.
1. Вызывается getView() для первого элемента, convertView равен null (при этом помним что у первого элемента уже было ранее созданное View), поэтому приходится заново его создавать и все находить.
2. Вызывается getView() для второго элемента, при этом в качестве convertView выступает то View, который раньше (еще до добавления второго элемента в список) использовалось для первого, соответственно все ссылки в его ViewHolder'е указывают на вьюшки первого элемента списка, и приходится находить их сначала. Если бы для первого элемента можно было использовать то View, которое для него использовалось раньше, а для второго создавать новое, то все было бы збс. Можно ли это как-то организовать? Я спрашивал здесь: http://stackoverflow.com/questions/38790574/getview-has-its-convertview-null-for-already-existed-item-when-i-add-new-item, но там написали что сделать этого нельзя, мб тут кто-нибудь шарит? RecyclerView не предлагать
>Для каждого View использую ViewHolder
как я понял, тебе нет смысла юзать ресайклер вью, всё равно там нечему ресайклиться. Складывай всё просто в скролл вью
Я не понимаю, в чем твоя проблема. Ну уйдет твоя конверт вьюха второму элементу, пиздец потеря. Ты все равно вьюхам будешь данные назначать в любом случае, даже если они там есть.
> RecyclerView не предлагать
Схуяли? Хотя он все равно тебе перебиндит вьюху.
>>818611
Дело не в назначении данных, ViewHolder хранит ссылки на вьюхи, входящие в состав элемента списка, а потеря в том, что тогда придется находить все эти вьюхи заново (около 20 элементов на каждый элемент списка). Причем даже если convertView != null это не означает что можно просто достать все из ViewHolder, придется заново вызывать findViewById() для каждой вьюхи и только потом присваивать им значения. Более того, раз уж теперь convertView != null не гарантия того, что не нужно искать вьюхи заново, искать их придется и в том случае, когда мы просто пролистываем список (хотя в этом случае их как раз таки можно взять из ViewHolder)
> что тогда придется находить все эти вьюхи заново
Нет, в этом и суть вьюхолдера. Вьюхолдер привязан к конкретной вьюхе, внутри которой конкретные объекты вью, которые при конверте не меняются.
Смотри, если взять случай со вторым элементом списка, convertView != null, но во вьюхолдере этого convertView хранятся ссылки на вьюхи первого элемента, поэтому придется их искать заново чтобы они ссылались на вьюхи второго элемента. Тут без поиска точно не обойтись. Можно конечно вообще не использовать вьюхолдер, но он как раз-таки нужен в тех случаях, когда getView() вызывается не при добавлении нового вью в список, а при скроллинге.
> но во вьюхолдере этого convertView хранятся ссылки на вьюхи первого элемента, поэтому придется их искать заново чтобы они ссылались на вьюхи второго элемента
Во вьюхолдере convertView хранятся ссылки на вьюхи внутри этого convertView. convertView похуй, какой она идет по счету.
Ты не понимаешь сути адаптера, и я даже не знаю как тебе объяснить ее не расписывая целую статью. Надеюсь ты найдешь такую.
RecyclerView даже будет понятней для понимания этого механизма.
>Во вьюхолдере convertView хранятся ссылки на вьюхи внутри этого convertView
Ну я с этим и не спорил вроде
Мне кажется ты просто не понял меня. Когда я вызываю getView для второго элемента, в качестве convertView я получаю то View, которое раньше использовалось для первого элемента, а значит внутри вьюхолдера этого конкретного convertView хранятся ссылки на те вьюхи, которые используются в данный момент первым элементом списка, правильно?
Теперь если я просто возьму эти элементы из вьюхолдера и запишу в них данные, предназначенные для второго элемента, то по сути я перепишу их для первого элемента, а это совсем не то что я хочу сделать
> Теперь если я просто возьму эти элементы из вьюхолдера и запишу в них данные, предназначенные для второго элемента, то по сути я перепишу их для первого элемента
Да, и это ок.
> а это совсем не то что я хочу сделать
Ну что ж поделать. Вьюха должна просто показывать данные, а всякие состояния нажата кнопка, не нажата, ты должен хранить не во вьюхе.
Просто тогда получается, что если не находить вьюшки заново, то все вьюшки любого элемента списка будут ссылаться на вьюшки первого элемента (так собственно оно и есть, когда я например чекаю чекбокс в 6-м элементе он чекается у всех остальных тоже)
>состояния нажата кнопка, не нажата, ты должен хранить не во вьюхе
Хм, спасибо, подумаю над этим
Есть ли вариант вникать в такую литературу, учитывая несильный английский?
class MainActivity extends AppCompatActivity
?
С какой версии можно использовать Activity?
И вообще, есть ли смысл использовать Activity вместо AppCompatActivity? То же самое, но + обратная совместимость, разве нет?
Я так понимаю, раз минимальное API 14 - то я могу спокойно использовать Activity, а на других приложение все равно не запустится?
Почему отсутствие дизайна в куче статей называется "то касается визуально-функциональной части, то Google удалось объединить принципы хорошего дизайна с инновациями и возможностями новых технологий и науки.
Material design базируется на тактильной реальности, вдохновлен изучением бумаги и чернил, технологически продвинут и открыт для воображения и магии."?
Потому что. Дизайнеры решили. Ты не дизайнер, и вообще способен только на субъективные оценочные суждения.
Либо готов вступить в проект.
вкtiper2014
Рассмотрю задания энивэй я вообще за любую движуху
найду
Оказалось что проблема была в том, что listView по высоте был выставлен в wrap_content, из-за этого для отрисовки каждого элемента списка getView вызывался по 2 раза, при этом в качестве convertView передавался один и тот же элемент (хз почему). Исправил на match_parent и все заработало
> Activity вместо AppCompatActivity
Если хочешь разный дизайн на разных устройствах то юзай. AppCompatActivity тащит за собой материал дизайн.
>>818809
Ну ананасу с харкача виднее как дизайн делать. Можешь портировать иос дизайн на ведро 1 в 1, есть каста самых пришибленных заказчиков, они как раз так обожают.
мммб ImageButton
Ну, например, у меня сделано так.
Есть класс от которого наследуются все фрагменты, например "BaseFragment".
На стадии создания активити, я запихиваю все свои фрагменты во фрагментменеджер и хайдю их там, чтобы они не перерисовывались.
В базовом классе я проверяю при изменении статуса isHidden
http://pastebin.com/btBVwZa9 и пихаю тулбары, которые прописаны в лейаутах фрагментов.
Подводных камней не вижу.
Да, тогда точно все будет ок, но жди что на других устроствах некоторый функционал может отваливаться.
заебешься на эмуляторах все тестить.
Короче, вопрос такой: где почитать (на русском языке, желательно) последовательной от простого к сложному информации по теме? Это же называется material design?
У меня сейчас так:
//----------------------------------------------------------
@Override
public void onActivityResult(final int requestCode, int resultCode, Intent data)
{
if(VKSdk.onActivityResult(requestCode, resultCode, data, new VKCallback<VKAccessToken>()
{
@Override
public void onResult(VKAccessToken res)
{
mAccessToken = res;
}
@Override
public void onError(VKError error)
{
finishActivity(requestCode);
}
}))
{
super.onActivityResult(requestCode, resultCode, data);
}
VKRequest dialogsRequest = VKApi.messages().getDialogs(VKParameters.from(VKApiConst.ACCESS_TOKEN, mAccessToken,
VKApiConst.COUNT, 200));
final VKCommentArray dialogs = new VKCommentArray();
dialogsRequest.executeWithListener(new VKRequest.VKRequestListener()
{
@Override
public void onComplete(VKResponse response)
{
super.onComplete(response);
try
{
dialogs.parse(response.json);
} catch (JSONException e)
{
e.printStackTrace();
}
}
@Override
public void onError(final VKError error)
{
Log.i("ERROR", error.toString());
}
});
}
//----------------------------------------------------------
Но реквест всегда выполняется с ошибкой. В error.toString() строка "VKError (API errorVKError (code: 15; ; Access denied: no access to call this method))".
AccessToken вроде передаю нормально. Может, дело в разрешениях в самом вк на страничке приложения? Какое разрешение нужно, чтобы просматривать групповые чаты?
У меня сейчас так:
//----------------------------------------------------------
@Override
public void onActivityResult(final int requestCode, int resultCode, Intent data)
{
if(VKSdk.onActivityResult(requestCode, resultCode, data, new VKCallback<VKAccessToken>()
{
@Override
public void onResult(VKAccessToken res)
{
mAccessToken = res;
}
@Override
public void onError(VKError error)
{
finishActivity(requestCode);
}
}))
{
super.onActivityResult(requestCode, resultCode, data);
}
VKRequest dialogsRequest = VKApi.messages().getDialogs(VKParameters.from(VKApiConst.ACCESS_TOKEN, mAccessToken,
VKApiConst.COUNT, 200));
final VKCommentArray dialogs = new VKCommentArray();
dialogsRequest.executeWithListener(new VKRequest.VKRequestListener()
{
@Override
public void onComplete(VKResponse response)
{
super.onComplete(response);
try
{
dialogs.parse(response.json);
} catch (JSONException e)
{
e.printStackTrace();
}
}
@Override
public void onError(final VKError error)
{
Log.i("ERROR", error.toString());
}
});
}
//----------------------------------------------------------
Но реквест всегда выполняется с ошибкой. В error.toString() строка "VKError (API errorVKError (code: 15; ; Access denied: no access to call this method))".
AccessToken вроде передаю нормально. Может, дело в разрешениях в самом вк на страничке приложения? Какое разрешение нужно, чтобы просматривать групповые чаты?
Все очень просто.
1) Базовый DrawerLayout, так в принципе уже мало смысла делать: https://developer.android.com/training/implementing-navigation/nav-drawer.html
2) С "новым" NavigationView: http://www.android4devs.com/2015/06/navigation-view-material-design-support.html
А вообще если ты не можешь разобраться в семплах, то пизда тебе короче.
Не ебу что это за окошко, но тебе нужно при запросе токена на клиенте добавлять нужные пермишены.
> так в принципе уже мало смысла делать
Пока пидорасы-дизайнеры будут делать собственный дизайн бокового меню а такие найдутся всегда, смысл будет.
С NavigationView это всеравно проще будет скорее всего.
Это в VKSdk.login()?
Я вызываю VKSdk.login(this, null). И не ебу, что можно поставить вместо null. Сигнатура функции такая:
VKSdk.login(Activity runningActivity, String... scope);
Что такое scope? Что он вообще должен делать? Гугл-переводчик переводит это как "объём". Какой нахуй объём?
В документации ни слова нет об этой функции. Примеров тоже нет. Я догадываюсь, что вместо scope нужно что-то подставить, но не ебу что.
>String... scope
Это разрешения, которые запрашивает приложение при доступе к функционалу ВК.
>Что такое scope? Что он вообще должен делать? Гугл-переводчик переводит это как "объём". Какой нахуй объём?
Ты нахуй сюда пришел? Ты документацию читал? Ещё что-то где-то посматривал?
Банально, сука, открой сорцы VKSdk
/
Starts authorization process. If VK app is available in the system, it will be opened
to request access from user. Otherwise, UIWebView with standard UINavigationBar will be used.
@param activity current running activity
@param scope array of permissions for your applications
/
public static void login(@NonNull Activity activity, String... scope) {
VKServiceActivity.startLoginActivity(activity, requestedPermissions = preparingScopeList(scope));
}
То есть я, например, должен вызвать VKSdk.login(this, "messages")?
Хуле об этом в документации не написано? Почему даже примеров нет? Пиздец. Блядь, ну посмотрите вы на MSDN - образец превосходной документации. На каждую(каждую, блядь!) функцию расписаны подробно все её параметры, какими они могут быть, что должны делать, ещё и примечания внизу на случай самых разных непоняток. А тут "ну короче у нас есть такая функция, используйте её, только мы не скажем, как".
Я вот знаю только одно значения слова Scope - это область видимости внутри скобочек в языках программирования. А у них, блядь, так параметр называется незадокументированный.
Пиздец, просто пиздец.
А, это же джава. Документация не там, где она должна быть, а по сорцам размазана тонким слоем.
Ссылку забыл, вот ВСЕ расписано с примером блять рабочего приложения. https://github.com/VKCOM/vk-android-sdk
Да, давайте хранить документацию непонятно где, а потом называть всех жопочтецами.
>>819559
Чем хорошо-то?
Блядь, джава же - ООП-язык. Её создатели должны понимать важность таких вещи, как инкапсуляция и отделение чёрного от белого. Тогда хули у них сорцы вперемешку с документацией идут, когда это две отдельных сущности? Хуле пользователю нужно залезать во внутренности реализации, чтобы узнать, как обращаться с интерфейсом? Где основные принципы, блядь?
Блядь, и так у них в этом плане всё хуже, чем в C++, так нет же, они ещё дополнительно всё смешивают. Так делать нельзя.
Странно, что в C++ таких проблем не возникает. МОЖЕТ, ПОТОМУ, ЧТО ТАМ УМЕЮТ ДЕЛАТЬ ДОКУМЕНТАЦИЮ?
Отделил свое жидкое от своего длинного за твою щечку. Проверяй.
> Тогда хули у них сорцы вперемешку с документацией идут
Алло, твой MSDN генерится автоматически с исходников. Так же работает и javadoc.
https://msdn.microsoft.com/en-us/library/5ast78ax.aspx
>>819567
Ой вася, javadoc это приятное дополнение. Документация зависит от создателя, а не от языка. Команда ВК не потрудилаьс сделать отдельную доку, но у самой джавы и андроида, а так же хороших либ есть свои документации где все расписано.
Это форс какого-то поехавшего из джава треда, всех направляет в js. Я только ленивых туда отправляю.
Ты не на тот язык документацию смотришь. Вот примеры превосходной, написанной вручную документации:
https://msdn.microsoft.com/en-us/library/windows/hardware/ff551072(v=vs.85).aspx
https://msdn.microsoft.com/en-us/library/windows/desktop/ms633545(v=vs.85).aspx
https://msdn.microsoft.com/en-us/library/windows/desktop/ff476082(v=vs.85).aspx
>>819571
Ну допустим, тут ты прав. В любом случае, документация VK API - говно. А оставлять в продакшене в качестве документации комменты в сорцах может только идиот.
Ну у Вк не самая худшая документация. Эхх помню пару лет назад смотрю документацию гугла, а потом понимаю что там все диприкейтед и мне нужно форсировано включать английскую версию что бы увидеть новую. Или фейсбук где ты навсегда потеряешься среди ревизий и новых версий, а поиск кидает тебя обязательно на старое.
>А оставлять в продакшене в качестве документации комменты в сорцах может только идиот.
Ебаните этому дебилу чем нибудь тяжелым по голове.
Но они могли хотя бы сделать отдельную веб-страничку с описанием всех методов для Android SDK. И читать удобно, и в сорцы лезть не надо.
В любом случае, всем спасибо.
Кажется тебе ответили на другой вопрос. Ты спрашиваешь какую базу тебе использовать на бекенде, или какую базу тебе использовать на клиенте? Если второе, то конечно SQLite, а как ты связывать атм будешь, ну хуй знает, можешь с сокетами поебаться, можешь SOAP, моешь REST Api. Тебе открыты все двери.
https://hh.ru/resume/25064bdf00020df79e0039ed1f776b326e4b36?query=Android
https://hh.ru/resume/a18adba50001ce6ce50039ed1f725a6f6a3548?query=Android
https://hh.ru/resume/891c957b0002dd62780039ed1f503762326f48?query=Android
(вообще пушка, 10к рублей)
https://hh.ru/resume/722403a50002cbcacf0039ed1f394b384e3344?query=Android
https://hh.ru/resume/62241aaf00021cdeac0039ed1f724737414f43?query=Android
ЗП меньше тестеров, блять
Есть одно приложение, которое построено вокруг взаимодействия с несколькими сетевыми API. Для каждого апи есть класс-обертка, методы которого оборачивают параметры в HTTP запрос и шлют его на сервер.
Так вот, как это дело правильно тестировать? Очевидно что мне в тестовом нужно как-то подменить класс, отсылающий реальные запросы, на другой, который отвечает просто заранее заготовленным ответом. Как это лучше сделать? Понятно что надо выделить интерфейс, настоящую и тестовую реализации. А вот что делать дальше?
Тестирование при этом проводится автоматически на CI-сервере, так что вариант "перед тестами вручную что-то менять в коде" не катит.
Я пока вижу два варианта:
1) В коде теста в явном виде вызывать метод у моей Activity, который запишет в нее нужный мне экземпляр апи.
2) Выделить Factory этих апи, сделать отдельный flavour для теста и для реальной версии, в которых они будут отличаться буквально в одной строчке кода - в реальном создаваеом классе.
Есть еще какие-то Dependency Injection типа Dagger 2, я их смотрел но они мне кажутся какими-то дохуя навороченными для такой простой задачи.
В статье ни слова про свифт. Это очень даже хорошо если уберут все старые костыли и начнут заново.
Глаза протри.
Напиши на Хаскелле. После го и питона вообще просто будет https://github.com/neurocyte/android-haskell-activity/blob/master/src/HaskellActivity.hs
Норм, спасибо
Посмотри как это через retrofit делается, я конечно на 100 мегов не отправлял, но на 4-5 тянет легко
Натуралы на андроид пишут на джаве, ну в крайнем случае на котлине. Если тебе сделать копию сайта то действительно cordova твой друг.
Это опять я. Разобрался немного с шаблоном по nav-drawer-у. Но там создается немного не то. В шаблоне вызывается drawer по нажатию на кнопку в тулбаре, и все это делается через toggle. Я написал то же, что было здесь: https://developer.android.com/training/implementing-navigation/nav-drawer.html за исключением мест, связанных с этим toggl-ом. Казалось бы, пальцем уже можно что-то выдвинуть, но пока нихрена не выдвигается. Вообще, я пытаюсь привязать выдвижение drawer-а к какой-то своей кнопке на экране а тулбар вообще у меня отсутствует. Что мне делать?
Если б-г разумом не наделил, то можешь например поюзать либу от Mike Penz-а, а так, статей по навигации тысячи
ИМХО, жаба достаточно вменяема для создания стандартных приложений, нафига что-то менять я понять не могу, лучше уж пусть запилят сборку побыстрее в студии...
Сборка и так быстрая, если дать памяти и в отдельной жвм.
Я не про косяки джавы, у самого андроида жуткая фрагментированность и куча старых болячек, их надо уничтожить, новая система это могла бы сделать, но вряд ли они откажутся от нашего нелюбимого зеленого гомункула.
Андроид был типичным стартапчиком. Его побыстрому сляпали из говна и палок и вовремя заняли нишу.
Теперь, когда andorid принадлежит ~90% рынка, нужно переделывать нормально.
По опыту наблюдением за развитием WindowPhone, я тебе гарантирую, там будет:
1) обратная совместимость со старыми android приложениями
2) нормальное обновление в независимости от производителя (как у iOS/WP)
Так что для людей, которые учились программировать, а не задрачивать Java+AndroidAPI - все только в плюс.
>нафига что-то менять я понять не могу
Там вроде всякие легальные терки с ораклом были, который та еще корпорация зла с анальнейшими лицензионными соглашениями, просто не разменивается на мелочи и суды с кем-то меньшим чем гугл.
Господа, вот какое будущие нам готовит Google:
0) OS НЕ на ядре Linux, а чистая Виртуальная Машина, работающая прямо на железе
1) Atom вместо IDE
2) Dark вместо языка
3) ReactJS/Native стиль разработки UI и при этом полностью в коде
4) Кроссплатформа (android/ios/fuchsia) из коробки, это частино решит проблему миграции (android->fuchsia)
5) Material Design везде (и на iOS)
Пользователи macOS/Linux могут уже сейчас ощутить на губах вкус новой жизни https://flutter.io/getting-started/
Да.
Аноняшь, умерь агрессию, я же не говорю что это хорошо.
Я просто, принес последние новости из Android мира.
Какие нахуй новости? Хватит всякое говно читать и новостями это называть. Заебали со своими истериками.
ГУГЛ ДУМАЕТ ПЕРЕЙТИ НА СВИФТ
ГУГЛ ДУМАЕТ ПЕРЕЙТИ НА ГО
ГУГЛ ДУМАЕТ ПЕРЕЙТИ НА РЕАКЕТЖС
ГУГЛ ХОЧЕТ ПЕРЕЙТИ НА ФУКСИЮ
И так, сука, каждый месяц. Необучаемые.
В истерике, здесь бьешься только ты небось еще и не java пишешь.
Интеллигентные разработчике #slack, с интересом обсуждают эту новость.
http://www.androidpolice.com/2016/08/12/google-developing-new-fuchsia-os-also-likes-making-new-words/
Каждый раз всплывают какие то новые баги и несовместимости с обновлением множественных "модулей", рождаются новые костыли. Просто в голове не укладывается что я трачу на это время.
По сравнение с "этим" в iOS Apple уже все за тебя сделали.
>Какой смысл в этой говняной смеси из жса и жавы?
Ты про Dart? ХЗ, спроси у Google.
Наверное что бы подмять всех под себе: OS принадлежит Google, язык теперь тоже Google.
Хреновая вообщем тенденция, лучше бы сделали легкий дистрибутив Linux для мобилок.
Все бы, тогда писали бы на чем сами бы захотели.
Да-да, АНДРОИД СКОРО ВСЁ.
То его Ксамарин похоронит.
То РеактНэйтив.
Теперь вот Фуксия.
Джава тоже СКОРО ВСЁ.
Сначала её убъет Котлин.
Потом её убъет ЖС.
Потом её убъет Дарт.
Кстати, по последним данным вроде бы Intel Multi-OS Engine закрылся.
Видимо, Intel поняли что не смогу тягаться с Google на умирающей платформе.
Intent intent = new Intent(this, RegistrationIntentService.class);
startService(intent);
МАНЯФЕСТ гыгыг
>Не пизди, они на той неделе новый релиз выкатили.
Ну ни трялль плиз
1) последний билд от 20 мая
2) форум разработчиков, уже в корзине
>Я вот знаю только одно значения слова Scope - это область видимости внутри скобочек в языках программирования.
Говна тебе в кашу.
Нахуй тебе маслонож, когда есть православный датабиндинг?
Оракле их просто доебало уже
Да хоть очко себе пусть разрабатывают. Не велика потеря.
Вот такой вот замечательный стектрейс получаю:
Fatal Exception: java.lang.VerifyError: com/avocarrot/androidsdk/DeviceInfo
at com.avocarrot.androidsdk.Avocarrot.(Avocarrot.java:49)
at com.avocarrot.androidsdk.Avocarrot.getInstance(Avocarrot.java:108)
at com.avocarrot.androidsdk.BaseController.(BaseController.java:53)
at com.avocarrot.androidsdk.BaseController.(BaseController.java:47)
at com.avocarrot.androidsdk.AvocarrotCustom.(AvocarrotCustom.java:21)
at com.appodeal.ads.native_ad.c.a(Unknown Source)
at com.appodeal.ads.y$1.run(Unknown Source)
at android.app.Activity.runOnUiThread(Activity.java:4737)
at com.appodeal.ads.y.a(Unknown Source)
at com.appodeal.ads.y.a(Unknown Source)
at com.appodeal.ads.y$a.a(Unknown Source)
at com.appodeal.ads.r$b.a(Unknown Source)
at com.appodeal.ads.r$b.onPostExecute(Unknown Source)
at android.os.AsyncTask.finish(AsyncTask.java:632)
at android.os.AsyncTask.access$600(AsyncTask.java:177)
at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:645)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5372)
at java.lang.reflect.Method.invokeNative(Method.java)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:970)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:786)
at dalvik.system.NativeStart.main(NativeStart.java)
Вот такой вот замечательный стектрейс получаю:
Fatal Exception: java.lang.VerifyError: com/avocarrot/androidsdk/DeviceInfo
at com.avocarrot.androidsdk.Avocarrot.(Avocarrot.java:49)
at com.avocarrot.androidsdk.Avocarrot.getInstance(Avocarrot.java:108)
at com.avocarrot.androidsdk.BaseController.(BaseController.java:53)
at com.avocarrot.androidsdk.BaseController.(BaseController.java:47)
at com.avocarrot.androidsdk.AvocarrotCustom.(AvocarrotCustom.java:21)
at com.appodeal.ads.native_ad.c.a(Unknown Source)
at com.appodeal.ads.y$1.run(Unknown Source)
at android.app.Activity.runOnUiThread(Activity.java:4737)
at com.appodeal.ads.y.a(Unknown Source)
at com.appodeal.ads.y.a(Unknown Source)
at com.appodeal.ads.y$a.a(Unknown Source)
at com.appodeal.ads.r$b.a(Unknown Source)
at com.appodeal.ads.r$b.onPostExecute(Unknown Source)
at android.os.AsyncTask.finish(AsyncTask.java:632)
at android.os.AsyncTask.access$600(AsyncTask.java:177)
at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:645)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5372)
at java.lang.reflect.Method.invokeNative(Method.java)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:970)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:786)
at dalvik.system.NativeStart.main(NativeStart.java)
Занятно, мне понравилось на первый взгляд.
Все началось с того что мне нужно было установить картинку на весь экран. Она имела размер 1080h на 1920w пикселей. Ну выдало мне мне нехватку памяти. Полез разбираться - нужно юзать битмап и скейлить изображение. Окей, взял со stackowerflow метод - принимает 2 параметра необходимую высоту и ширину и скейлит изображение.
Вначале проверил на 600 на 600 - норм выглядит, норм работает.
Но дело в том что размеры экрана моего устройства (metrics.heightPixels и ширина) как раз 1080 на 1920. И самом собой при использовании метода по сжатию - мне опять выдает out of memory
+ меня смущает что при 600 на 600 она выглядит норм. Может исходный ресурс какое-то разрешение не верное имеет? Или блять что-то не в пикслях считает, а в dp?
Что-то ты неправильно делаешь, видимо у тебя до загрузки картинки память уже забита.
Сделай дам прямо пере загрузкой и скинь картинкой.
Спасибо анон, но мне в чем тут проблема хотелось понять. В приложении только одна картинка и есть - фоновая. Не хотелось бы из-за нее одной фреймворк подключать и разбираться.
Эта картинка в drawable лежит. Может нужно в какой drawable-экстра hdpi засунуть?
В drawable-nodpi ставь. Обычный drawable в твоём случае скейлится в 3 раза, отсюда oom.
Да нечему там до картинки отжирать. Все нормально было, пока я с ней не стал работать, вот код
http://www.codesend.com/view/fb5c2d7a4c9e32c4f28616b77ff9ed7c/
Вот расход памяти:
Memory 1117
Memory 1117
Memory 77912
>>821157
Спасибо, сейчас попробую
Большое спасибо, после изменения начало хавать 13 метров. Настрою еще что бы на альфаканал не обращало внимание и может чуть уменьшу - вообще отлично будет. Который час уже с этим долбился, ты мой спаситель.
А можешь чуть развернетее объяснить почему так происходило? Оно в 3раза больший размер выводило?
Оно будет так же норм, если я буду пихать в свой drawable-xxhdpi, так?
> Оно в 3раза больший размер выводило?
drawable аналогичен drawable-mdpi.У тебя xxhdpi, это в 3 раза больше, чем mdpi, поэтому система сама скейлит картинки.
> Оно будет так же норм, если я буду пихать в свой drawable-xxhdpi, так?
Лучше drawable-nodpi, но я понятия не имею, что ты там делаешь вообще.
Но у меня есть вопрос: в сколько раз сама разработка сложнее, чем все эти разметки.
Я уже полгода пишу логику для этой ебучей разметки. На юдасити шли нахуй все видео, если ты выбрал курс Android dev и сразу пиши приложения - так сэкономишь время курса.
Спасибо за ответ. Вот же пидоры. Выставляют все так, как будто разработка под андроид это легко и даже твоя бабка сможет её осилить, начиная с разметки. А то я так потрачу овер 9000 часов на разметку, а потом окажется что я не тащу собственно саму логику. И нахуй мне теперь все эти сраные атрибуты.
Да, это легко. Поначалу.
>Окей, взял со stackowerflow метод
Stackoverflow Driven Development. Вся суть современных разработчиков.
Как вытащить данные из базы данных? То есть у меня есть база данных, в которой есть какой-то текст. Как мне его вывести, например, в TextView? Подскажите, какие методы используются, чтобы это сделать. Дальше уже буду искать туториалы, да на stackoverflow смотреть.
Это действительно легко. На уровне пыховебмакакинга, сложно найти что-то более простое в профессии.
Мамкин программист с 300к/с подъехал?
>Как вытащить данные из базы данных?
Ташема секретов то тут и нет.
Тупа берешь через openOrCreateDatabase + rawQuery и вытаскиваешь.
Иди нахуй, так деды еще в 45 кодили под 1.1 и нам велели.
Ты ветеранов андроид-разработки не уважаешь что-ли, сука?..
Ну я все таки считаю что они оверхед. Хотя если хочешь что бы с uri было то да, почему бы и нет.
Если писал приложение всё это время, то одобряю. Я потратил сутки(отрываясь на еду и толчок) на написание Movie Base в другом курсе по андроиду от юдасити
Да прям в 2 ночи проснулся, стукнуло в голову стать андроид разработчиком. Установил студию, открыл курсы на юдасити и пошло поехало. Надеюсь дойду до Movie Base как и ты и не застопорюсь с унылыми мыслями что программирование это тяжело и какой же я тупой.
Это был сарказм.
Теперь честно:
1) contentprovider - НЕ НУЖЕН
2) sqlite без ORM - НЕ НУЖЕН
А, это ты. Тебе уже сказали как пилить рест морду.
>>821814
Да, вначале всегда романтика. А потом говнозаказчики, говнодизайнеры и говноменеджеры всю романтику портят.
mysql + express + nodejs
Очень содержательно.
1) Если у тебя простое приложение, то ContentProvider может быть избыточным
2) ORM и всякие Realm не нужны. Достаточно использовать лёгкую библиотеку, предоставляющую удобное API для SQLite. например, StorIO
Пофиксил тебя.
Анончики, как правильно нотифаить о завершении запроса из сервиса? Юзать евинтбас? А он придет потом, если приложение свернуто в этот момент, и я отписался в онстопе?
Не прийдет тебе после он стопа нихуя. Только пляски с синглтонами и преференсами.
>Достаточно использовать лёгкую библиотеку, предоставляющую удобное API для SQLite. например, StorIO
>StorIO
Cupboard наше все. Хули все так рекламируют этот сторИО?
>расскажите чем занимаетесь
Занимаемся разработкой мобильных приложений на андроид.
>сколько времени идет на обучение
Уже полтора года опыта, а все еще учусь.
оп
>расскажите чем занимаетесь
Пердолимся с косяками системы и чужими косяками в процессе создаем свои, иногда пьем смузи с маффинами и чизкейками на митапах.
>сколько времени идет на обучение
Всегда учишься. Ну это вообще про программирование если конечно речь не про энтерпрайз.
android.database.CursorWindowAllocationException: Cursor window allocation of 2048 kb failed.
at android.database.CursorWindow.<init>(CursorWindow.java:108)
at android.database.AbstractWindowedCursor.clearOrCreateWindow(AbstractWindowedCursor.java:198)
at android.database.sqlite.SQLiteCursor.clearOrCreateWindow(SQLiteCursor.java:300)
at android.database.sqlite.SQLiteCursor.fillWindow(SQLiteCursor.java:138)
at android.database.sqlite.SQLiteCursor.getCount(SQLiteCursor.java:132)
at android.database.AbstractCursor.moveToPosition(AbstractCursor.java:219)
at android.database.AbstractCursor.moveToFirst(AbstractCursor.java:258)
И это на строке:
if (cursor != null && cursor.moveToFirst()) {...
Чо мне с курсором то делать надо что бы такого не было?
> сколько времени идет на обучение.
4 с половиной года учусь, например. До сих пор днище ибо работать не пробовал, а практика нерегулярная. Не будь таким, как я.
Не слушай его, курс хорош, если ты с нуля. И делали гугловские разработчики.
Там по соседству где-то курс по Гиту от двух тянок валяется, тебе тоже пригодится в будущем
Спасибо анончик, добра тебе
И как же вытаскивать данные про треки юзер без курсора?
С О К Е Т
Спасибо. Да я уже андроид-разработчик бвухахахаха. Ты тоже пости свои достижения. Movie Base, например.
нет ну вы посмотрите, этот идиот гринтекстит тестирование, как вы его еще до сих пор не обоссали блять, сука, тред школьников и дегенератов
https://habrahabr.ru/company/rambler-co/blog/266837/
roboelectric позволяет тестировать http запросы, думаю, это то, что тебе нужно
Обоссывают школьники и дегенераты. Вменяемым похуй. Пройдите в /b/, пожалуйста.
каждый раз, когда вменяемым похуй, школьников и дегенератов становится больше, это раковая опухоль, а ее надо лечить.
Очевидно пиздовать в стаковерфлоу в котором эта тема обсасывалась уже не раз использовать новую поистине кроссплатформенную СУБД Realm.
di mvp rx mvvm kotlin
пиздец, дурачку припекло, что пока он пишет свои ссаные тесты, норм парни едят маффины и ебут тёлок
(Не спрашивайте, почему так долго пишу, был занят другими делами).
Так вот, допустим, я создаю новую Activity, чтобы, например, показать в ней информацию о чате.
Как туда передать VKAccessToken?
Остальные данные худо-бедно передаются:
Bundle chatData = new Bundle();
chatData.putIntArray("CHAT USERS", chosenChat.users);
chatData.putString("CHAT TITLE", chosenChat.title);
Intent intent = new Intent(Activity.this, ChatActivity.class);
intent.putExtra("CHAT DATA", chatData);
startActivity(intent);
Но! VkAccessToken нельзя передать просто так. Его не разобрать на элементы и собрать заново, он не Serializable, и вообще какой-то мутный. В новой Activity заново проходить авторизацию, что ли?
Вакаба опять съела спецсимволы.
Ты сорцы принципиально не смотришь?
У тебя аж 4 возможности!
1. Через файл
2. Через шаред преференсы
3. Через сериализацию в строку методом serialize
4. VkAccessToken - блядский синглтон
Оу. Спасибо большое!
Непривычно лезть в сорцы. Всегда, когда хотел узнать про метод, заходил на MSDN, вводил название и получал самое подробное описание.
Нет, это хуйня.
Говна пожуй.
Хотел добавить, но Андроид студия перестала работать. Точнее эмулятор перестал работать. Вчера работал, сегодня включил пеку и эмулятор больше не запускается, жалуясь на отсутствие аппаратного ускорения в процессоре. Это пиздос, еще вчера все работало.
Маленькие гомики вынесли из твоего процессора аппаратное ускорение, чтобы ты не стал андроид разработчиком. Честь им хвала.
Очко у тебя дерпекейтед
>>822981
Вообщем вот, готово.
Функционал довольно простой.
При клике на кнопку 3/2/1 очка в переменную currentState записываю 3 2 или 1. Потом на методе кнопки отмены:
if (currentState == 1 || currentState == 2 || currentStat == 3)
teamscore = teamscore - currentState;
display(teamscore);
Просто отнимаю у текущего количества очков, то, что было нажато.
Я понимаю что это может быть нубское и кривое и неправильное решение, но это единственное с чем я смог совладать.
Мне нужно запихнуть его во фрагмент, но в билдере есть метод только withActivity. Я могу привязать его к общей для фрагментов Activity, но как сделать, чтобы на одних он выдвигался, а на других - нет? Пока что лучшее что я придумал это closedrawer в onDrawerSlide, но это кривовато смотрится, да и в целом
Пути к изображениям.
Заноси весь счет за матч в коллекцию, чтобы кнопка отмены работала не один раз, а несколько.
А она и так не один раз работает, а сколько угодно. Переменные очков матчей - глобальные.
У меня тут другая проблема назрела. Иду дальше по курсе, пришло время делать чекбокс. Тут андроид студия мне выкидывает новый сюрприз. Вместо чекбокса в превью просто надпись Checkbox серая. Превью еще и ошибку выдаёт.
Кто-нибудь сталкивался? Есть не сложно проверьте как вас, может они поломали чекбоксы?
Отбой. Загуглив ошибку, оказалось что если переключить превью на API 23 вместо 24, то ошибка исправляется.
Твоя белая тема вырвиглазная. Еще и на дваче небось дефолтная тема вместо Neutron.
Попробуй, когда привыкнешь, не сможешь вернуться обратно.
бережет только если кодишь в темноте. У меня на ней всё расплывается, нихуя не вижу.
>>823425
Futaba у меня
>Че за футаба, кидай скрин/линк.
А все понял, это тема двача. Этот желтый вырвиглазный цвет...
>>823445
Самое вернее меню.
он телесный, а не желтый
Ночью - охуенно.
А вот днем пробовал работать на дракуле с улицы - нихуя не видно было вообще, как ни странно.
А вообще у меня sublimetext3
> Твоя белая тема вырвиглазная. Еще и на дваче небось дефолтная тема вместо Neutron.
Лол, так ведь это нейтрон — вырвиглазная параша, тогда как фотон очень выглядит очень солидно и стильно.
Кстати, тоже предпочитаю светлую тему в AS. Не понимаю вашего спора, кто-то любит светлые темы, кто-то тёмные, так что пусть пользуется тем, что нравится.
Серо-оранжевый фотон выглядит как хуита для школьников-"экстремалов" и прочей ниферской нечисти из середины нулевых в патрулях и обосранных джинсах с мотней до пола.
футаба-демиург
В активити создай поле куда ты можешь запихнуть текущий открытый фрагмент и делай проверку при открытии дровера, мол тот ли этот фрагмент для которого дровера надо открывать.
Есть код с ViewPager, 3 фрагмента для него и лайаута.
Когда добавляю 2 фрагмента, всё отлично перелистывается и работает, а когда пытаюсь добавить третий всё крашиться. Что делать?
Вот код MainActivity: @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
viewPager = (ViewPager) findViewById(R.id.viewPager);
viewPager.setAdapter(new CustomAdapter(getSupportFragmentManager(),getApplicationContext()));
}
private class CustomAdapter extends FragmentPagerAdapter {
private String fragments [] = {"1","2"};
public CustomAdapter(FragmentManager supportFragmentManager, Context applicationContext) {
super(supportFragmentManager);
}
@Override
public Fragment getItem(int position) {
switch (position){
case 0:
return new Fragment1();
case 1:
return new Fragment3();
case 3:
return new Fragment2();
default:
return null;
}
}
@Override
public int getCount() {
return fragments.length;
}
@Override
public CharSequence getPageTitle(int position) {
return fragments[position];
}
}
}
Есть код с ViewPager, 3 фрагмента для него и лайаута.
Когда добавляю 2 фрагмента, всё отлично перелистывается и работает, а когда пытаюсь добавить третий всё крашиться. Что делать?
Вот код MainActivity: @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
viewPager = (ViewPager) findViewById(R.id.viewPager);
viewPager.setAdapter(new CustomAdapter(getSupportFragmentManager(),getApplicationContext()));
}
private class CustomAdapter extends FragmentPagerAdapter {
private String fragments [] = {"1","2"};
public CustomAdapter(FragmentManager supportFragmentManager, Context applicationContext) {
super(supportFragmentManager);
}
@Override
public Fragment getItem(int position) {
switch (position){
case 0:
return new Fragment1();
case 1:
return new Fragment3();
case 3:
return new Fragment2();
default:
return null;
}
}
@Override
public int getCount() {
return fragments.length;
}
@Override
public CharSequence getPageTitle(int position) {
return fragments[position];
}
}
}
забыть о программирование
Почему нельзя просто кинуть код на пастбин, нахуя засорять тред?
Fragments.length тебе возвращает 3, при этом ты запрашиваешь индекс третьего фрагмента как 3 вместо 2. Из за того и крашит.
Да и вообще у тебя там какая то хуита писана. Возвращаешь null вместо какого нибудь дефолтного фрагмента, вообще идиот, пиздец
байткод
Забудь за все что ты учил в универе. И программирование тоже, оно для больных гениев.
https://ideone.com/jZL4Cz
Посмотри на этот код. Этот код я взял из реального проекта. Из игры. Это код отвечающий за парсинг файлика .osz - местный формат карт в игре. 700 строк кода, просто что бы запарсить 1 жалкий файлик. 1400 строк кода gamedata.java
А теперь после просмотра этого когда, спроси себя, сможешь ли ты совладать с этим?
Уруру :3, но ты всё равно уноси подальше.
Форс форсом, а мне понравилось. Перенес свой мелкий проект на него.
> Ensure SwipeRefreshLayout indicator is shown when setRefreshing(true) is called before the first measurement pass
> Reported Oct 18, 2014
Господе, какие же гуглы мудаки. Ну хотя бы можно теперь не ебаться вызовом через post.
нету
2. Чтобы взять ширину/высоту вложенного элемента уже после всей обработки я делаю так:
pizdaView.getViewTreeObserver().addOnGlobalLayoutListener(
new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
int width = pizdaView.getWidth();
pizda.fuck(new Hui(width));
}
});
Это норма и так все делают? Выглядит довольно костыльно.
> которая ездит влево-вправа
https://developer.android.com/reference/android/widget/Switch.html
> и так все делают
Я делаю через pizdaView.post { pizdaView.getWidth() }, но никто не запрещает вручную вызвать measure с нужными параметрами и посмотреть. Хоть в некоторых случаях у меня не получается так высчитать
Фух. Выдыхаем.
То есть до этого тебе это было непонятно? Какой же ты умный.
У фронтендщиков скиптодрисня и этим все сказано. Теоретически обфускация может сократить размеры class файлов.
Я ж не классы прошу сжимать, ясное дело что там прогвард, вообщем-то она таки и сжимает, но на фоне ресурсов это хуйня, пару тысяч методов удалится, но это сотни килобайтов. Я про ассеты и ресурсы картинок.
>>825342
>но мне лень искать
Ну лан.
Короче аапт для ресурсов это делает сам, но кастомно можно добиться лучшего результата.
https://medium.com/@duhroach/smaller-pngs-and-android-s-aapt-tool-4ce38a24019d
И разумеется если ты пожмешь сам, то аапт может сделать хуже.
Но мне обещают 20%...
А не вытяну, значит плагин плохой, лол. Поиграюсь с библиотеками посмотрим чо как, мне ведь в принципе ассеты один раз сжать.
Аноны, какие шансы устроиться джуном на ведре?
Знаю что мобильная разработка сейчас пользуется огромным спросом, но все же? Какие требования к джунам?
На xml все пишут в вашем аднроиде.
Вайпалку тредов гей ниграми с рандомными ниграми и, чтобы батхертнутые посты в баззу данных сохранял.
нейросети
Всё, что ты можешь сделать сам уже кто-то сделал до тебя. Причём значительно лучше.
Аноны, если я аттачу/детачу вью к пресентуру в онкриейте/ондестрое, и эта вью ретаин фрагмент, то не будет же ничего течь? Пресенет соответсвенно находится в ретеин фрагменте.
Ландан из зе кепитал оф грейт бритн в
Расскажите, как вы вообще живёте
> несчастные
И хули ты несчастен? Если не замарин.формс, то тот же самый ведросдк + более няшный сярп.
>Есть тут такие же несчастные, кому как и мне приходится писать код каждый день
Расскажите, как вы вообще живёте
подскажите, аноны
могу ли я сделать в RecyclerViewAdapter кастомизированый первый айтем списка?
типо мне надо что бы первый айтем отображался с картинкой и текстом, а следующие обычные айтемы только текст
это надо в onBindViewHolder напиать что то типо
if(position =0){}
да?
Переопределяешь getItemViewType, на нулевой итем возвращаешь какую-то константу, а на остальные - другую константу. В onCreateViewholder ты будешь получать viewType, в onBind ты можешь его получить через getItemViewType(position), но лучше конечно отдавать работу самому холдеру по байндингу данных.
спасибо, анончик
Есть одно приложение и в нём есть платная услуга. Основная его функциональность обеспечивается сервером, платная услуга даёт дополнительную функциональность.
Итак, вопрос: как можно на серверной стороне проверить, купил ли человек эту услугу? Можно ли как-нибудь спросить подтверждение с сервера гугла?
А ты не пробовал почитать документацию по in-app billing'у гугла? Они вообщем-то другую неохотно пропустят, если пропустят вообще. А в той конечно можно проверить наличие конкретной покупки, вот только ломается всякими лакипатчерами и прочей шляпой. Вообще у любой нормальной pay-системы есть возможность проверить перевода денег на счет, а на своем серваке после перевода бабоса записать транзакцию.
А потом по их костям придет Хаскелл и похоронит всех!
Он прав, либо адаптер делать либо 2 фрагмента, или 2 вьюхи на худой конец. 2 экземпляра одного объекта само собой.
Могу ли я в Андроиде:
1. Создать службу стартующую при запуске приложения.
2. Служба должна быть синглтоном.
3. В коде в активити с помощью депенденси инжекшен получать доступ к методам синглтоновской службы.
Или вместо синглтона должен стартовать некий пул из экземпляров сервиса. А при депенденси инжекшене должен выбираться экземпляр из пула и после возвращаться в пул обратно
>только установил студию и делает приложение
>выглядит уже лучше моих
то чувство когда антидизайнер
Хайп сходит, перспектив никаких. Рынок перенасыщён, разработка происходит на уровне пхп макакинга. Лет 5 назад можно было вкатиться, сейчас просто забей.
Какие альтернативы? Какая сфера на подъеме? Ты тралишь очевидно. Сейчас довольно популярна связка вр шлема + смартфон.
>>826966
>>826965
Блять, о чем ты? Иди реализуй AbstractSingletonProxyFactoryBean.
> Создать службу стартующую при запуске приложения
> Служба должна быть синглтоном
Что ты вкладываешь в понятие служба. Можно запустить сервис как компонент приложения, можно просто хуякнуть в onCreate создание синглтона.
> В коде в активити с помощью депенденси инжекшен получать доступ к методам синглтоновской службы
Тогда только в виде обычного синглтона, DI есть, берешь и без задней мысли инжектишь. @Provides @Singlton, хуяк хуяк и в гуглплей.
>>826991
> Сейчас довольно популярна связка вр шлема + смартфон
Популярна где? Этим занимаются полторы студии и 3 калеки. Работу чтобы делать именно вр ты не найдешь.
>Этим занимаются полторы студии и 3 калеки.
Самсунг, хуавей, даже сам гугл выходит на рынок со своим шлемом и платформой, а значит появится единый стандарт для запиливания приложух под вр, инструментарий удобный и тд.
Выходить на рынок != пилить контент. АндроидТВ с АндроидАвто тоже вышел на рынок, но запил приложений на него не сильно то и популярен.
>Сейчас довольно популярна связка вр шлема + смартфон
Тебя в любом случае не возьмут без опыта работы с графонием.
Спасибо, глупый вопрос, но вот если андроид работает на джаве нативной, как он запускает с шарп код, это все как-то оборачивается в джаву перед загрузкой в гугл маркет?
Для игр достаточно сишного NDK - там графика, звук, сенсоры. Юнити поверх него и работает.
Понятно
Это был вопрос.
Instant Run.
Или самому добавить переменную и тупо чекаеть её в onDraw?
Тяжеловесные вычисления какой природы? Если их можно один раз подсчитать, а потом использовать. А подсчитывать скорее всего нужно в onLayout/onMeasure. Сделать свой сеттер, который при смене параметра вызывает invalidate.
Обработка возможных пересечений/коллизий объектов (от наличия которых зависит как их рисовать). Если пользователь подвигает объекты внутри, тогда надо перерисовывать и пересчитывать, однако это не каждый onDraw происходит.
>Сделать свой сеттер, который при смене параметра вызывает invalidate
не понел
есть список ReyclerView и адаптер кастомный
при нажатии на айтем списка должно открываться новое активити
но почему то когда происходит клик, то в моем листе, из которого я достаю данные обнаруживается, что он пустой
вот код адаптера - http://pastebin.com/VUQGmXc9
и мэйн активити - http://pastebin.com/iWPe6nbM
Вообще похуй, по-видимому андроид достаточно умён сам по себе чтобы не вызывать onDraw постоянно, он это делает только когда я трогаю соответствующую вьюху.
Это чтобы его наоборот заставить перерисовывать надо вызывать invalidate.
В гугле. Ну сириусли, вы смеетесь?
>Анон, где можно поучить колекции?
https://kotlinlang.org/docs/reference/collections.html
не благодари
Я в онСтарте через хендлер, если это больше ни от чего не зависит.
https://www.udacity.com/course/developing-android-apps--ud853 нормас тема в дополнение к книгам и докам?
https://www.udacity.com/course/android-developer-nanodegree-by-google--nd801
Вот единственный годный курс. Можешь его на месяц бесплатно получить, если есть студенческий аккаунт на гитхабе.
Так это не курс, а программа целая и первый курс как раз тот, который я скинул, ну короче норм. Нет к сожалению уже не студент и еще не студент.
Хотя если деньги есть, купи эту программу - не пожалеешь ни разу. Там даже кодревью делают тебе.
Не вижу смысла в такой книге, когда есть бесплатные, обновляемые доки от гугла.
Ок, понял.
Такой вопрос, аноны. Курсы от гикбрейнз хуйня или стоящая штука? интересует именно мобайл разработчик. Напрягает долгость изучения - 11 мес, это чет долго
Почему? Мне прельстит что там типа общаешься ирл вроде как с людьми в профессии, можно спросить прям сразу что да как
Так-то оно так, но набирают они там огромное количество народа и много внимания они вряд ли уделят каждому, проще на двач код залить, авось кто и посмотрит. Я сам с 0 вкатываюсь (только си знаю и питон). Сначала думаю джаву выучить по Эккелю, а потом брать доки и курс вот этот >>827324. Ну дело твое.
Спасибо за курс, >>827405
13к в мес, пизда, мне бы зарабатывать каким-нибудь веб-макакингом столько в своей мухосрани
А кодревью и саппорт тоже пылится?
Так-то все доки у гугла бесплатные, но что-то я не вижу дохуя макак в андроиде.
Зачем на торрентах? Они и там бесплатные видео и домашки, а коревью можно и купить отдельно где нибудь найти.
Я тебе повторяю, что тебе делать в программировании?
Если ты не можешь в САМОСТОЯТЕЛЬНОСТЬ, то просто забей, это не твоё.
>саппорт
Няньку он блять хочет, охуеть вообще.
Тебе на торентах лекции дали, домашку дали. Ебись дальше сам, какой нахуй кодревью, поехавший. Для особо одаренных, в начале следующей лекции полтора часа разбирают домашки всех студентов, сможешь посмотреть как вообще нормальные люди кодят. Но лучше забей. И купи курс для лохов за 70к
Java и Android платные. Бесплатные только всякая шелуха типа html и введения в программирование.
Да я про муриканский курс, лучше его бери, а если не знаешь ангельский, то начни с этого, много времени потом сэкономишь, так как будешь читать свежайшие доки, а не переводы.
есть список ReyclerView и адаптер кастомный
при нажатии на айтем списка должно открываться новое активити
но почему то когда происходит клик, то в моем листе, из которого я достаю данные обнаруживается, что он пустой
вот код адаптера - http://pastebin.com/VUQGmXc9
и мэйн активити - http://pastebin.com/iWPe6nbM
Поц, ты обрезал код холдера.
Без разницы, но под виндой у IDE шрифты лучше.
https://www.youtube.com/watch?v=5W1KvjWudGE
Из под мака.
Поясните, чем отличается String[] от String... в джаве?
public static void main(String... args) {
....validatePhoneNumber("123-456-7890", "456-7890");
}
Конкретно в качестве передачи произвольного числа параметров методу разницы нет?
Говно для даунов.
>>827862
Ну в одном случае ты создаешь массив ручками, в другом он создается за тебя перечислением через запятую.
Неясного о Fuchsia остается еще много. Главный вопрос все же остается прежним — в каких системах планируется использовать эту ОС? Ожидать, что она создана в качестве альтернативы Android OS не стоит, ведь для того, чтобы программный продукт, в особенности, операционная система стал успешным, нужно активное сообщество разработчиков, каталог приложений и т.п. Google вложил сотни миллионов долларов в Android и вряд ли собирается что-то поменять.
Аноны, как сделать, чтобы если не открыта нужная активити, то показать нотификейшн, иначе получить данные в этой активити? Щас показываю нотификейшн и бросаю бродкаст, когда перехватываю его, то удаляю нотификеёшн, но в таком случае на пол секунды становиться видно иконку в статус баре
http://stackoverflow.com/questions/3873659/android-how-can-i-get-the-current-foreground-activity-from-a-service
Если хочешь стопроцентно рабочий вариант, то я предлагаю тебе записывать текущую активити в какую-нибудь переменную твоего Application'а или в SharedPreferences.
> Если хочешь стопроцентно рабочий вариант, то я предлагаю тебе записывать текущую активити в какую-нибудь переменную твоего Application'а или в SharedPreferences.
Ебать говнокод.
И в чем же говнокод? Это стопроцентно работает для его задачи, в отличии от туманных игрулек с GET_TASK, который диприкейтед уже 4 версии как.
Сервис, который отображает уведомление, поддерживает биндинг. К нему коннектишь активити и через биндер инкрементируешь счётчик подключений. Если счётчик на нуле — показывай уведомление.
Несколько громозкий вариант, но надежный и не говнокод.
Берешь и без задней мысли загружаешь.
Залей цветом бэкграунд вьюхи своего фрагмента.
действительно норм, пожалуй так и сделаю
Перекатил свой одноядерный днищебук на х64убунту, всё быстрее чем на винде кроме иде:
0~30с - мигает иконка
30с~1м - заставка
...~1:40 - появилось окно
...~2:40 - появился редактор
...~3:30 - догрузились остальные окна
...~5:15 - закончились синтаксический анализ и постройка градла
Градл настроил работать в демоне, апп запускается чутка быстрее, зависит от ситуации, запускаю на риал устройстве.
Сейчас еще попробую режим энергосбережения.
Кстати, почему синт анализ запускается когда нипопадя, т.е. даже после каждого отступа?
Анончики, кто юзвет StorIO? Мне надо положить в бд два разных объекта, т.е. сделавть два put'a с разными классами, но надо чтобы они были в транзакции. Это делается через lowlevel? Т.е. например:
lowlevel().beginTransaction();
storIOSQLite.put().object(firstObject)...//First class
storIOSQLite.put().object(secondObject)...//Second class
lowlevel().setTransactionSuccessful();
lowlevel().endTransaction();
Правильно?
Сколько оперативки? Если 8ГБ и больше, можешь в настройках -Xms512m -Xmx1024m прописать. Так я решал проблему на макбук эйре с 8 гигами, на десктопе с 16 пока не заметил проблем.
Насколько я знаю, правильно.
4gb
-Xmx512m -XX:MaxPermSize=512m сделал
думаю покопаться в настройках проверки синтаксиса, можно ил сделать чтобы проверял пореже и не все?
>5) Классы/интерфейсы и все вытекающие.
Здесь имеется ввиду понять что такое класс, интерфейс и т.д., или же надо поучить основные классы?
И то, и другое.
Это копия, сохраненная 13 сентября 2016 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.