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

    LeEnot
    @LeEnot
    Енот-андроид
    Храните хеш пароля пользователя у себя в базе и на устройстве. Прочитайте про хеширование (hashing), соль (key salt), KDF
    Хранить логин и пароль пользователя на устройстве не безопасно - любой, получивший доступ к устройству, при желании, сможет их оттуда вытащить и получить доступ к данным пользователя в вашем сервисе.
    UPDATE: на самом деле вам нужно хранить хеш хеша пароля пользователя
    Ответ написан
    Комментировать
  • Android-приложение отклонено при модерации в Google Play?

    LeEnot
    @LeEnot
    Енот-андроид
    Скорее всего вы задели самый главный орган гугла - баблоносную железу. Где-то как-то вы получаете бабки в обход гугловских 30%
    Ответ написан
    5 комментариев
  • Какой объем данных можно хранить в SQLite?

    LeEnot
    @LeEnot
    Енот-андроид
    При РАЗУМНОМ применении sqlite, проблем со скоростью у вас не будет.
    Грамотно стройте схему и индексы. Ну и не нужно туда пихать сериализованные картинки и другие файлы.
    На счет предельного объема - вы скорее заполните sdcard, чем дойдете до предела sqlite.
    Ответ написан
    Комментировать
  • Можно ли создать два AsyncTask'a в одном классе?

    LeEnot
    @LeEnot
    Енот-андроид
    Вы, конечно, можете добавить сколько угодно AsyncTask'ов в классе, но для загрузки изображений я бы порекомендовал использовать специализированную библиотеку типа Picasso, Glide, UniversalImageLoader или аналогичную.
    Какие преимущества вы получаете?
    1. Асинхронная загрузка изображений без головной боли
    2. Опциональное кеширование изображений - в том числе в RAM и на sdcard
    3. Масштабирование и преобразование изображений в thumbnails
    4. Еще много всяких приятных мелочей - см. настройки и опции библиотек
    Кстати, гугловцы для своих проектов использую Glide, очень много разработчиков используют Picasso - так что в поддержке недостатка не будет.
    Ответ написан
    6 комментариев
  • Где хранить текстовые фрагменты объемом несколько абзацев?

    LeEnot
    @LeEnot
    Енот-андроид
    Сначала нужно определиться, нужна ли вам локализация ваших текстов.
    1. strings.xml хороши в этом плане, потому что добавить перевод очень легко, создав соответствующий нужной вам локали строковый ресурс, а далее нужный вариант будет выбран системой автоматически.

    2. Если перевод не очень нужен, можно хранить данные в БД, но тогда ее нужно будет деплоить вместе с приложением - это нужно предусмотреть. Тут лучше завести отдельную базу, дабы не заморачиваться с апгрейдом схемы в дальнейшем.

    3. Еще вариант - хранить в JSON файлах, которые так же класть в assets приложения.

    4. Самый универсальный, но зависимый от сети вариант - хранить ресурсы на сервере и подгружать их, в зависимости от ваших нужд.
    Ответ написан
  • Как кастомезировать Android календарь?

    LeEnot
    @LeEnot
    Енот-андроид
    Все исходники Android доступны в рамках проекта AOSP.
    Никто не мешает скачать вам исходники календаря и подправить его, как вам хочется.
    Ответ написан
    1 комментарий
  • Какая операция запрещена в onLoadFinished?

    LeEnot
    @LeEnot
    Енот-андроид
    Из документации на Loader:
    Note that normally an application is not allowed to commit fragment transactions while in this call, since it can happen after an activity's state is saved. See FragmentManager.openTransaction() for further discussion on this.

    т.е. последний вариант.
    Ответ написан
    1 комментарий
  • Как программно осуществить переключение фокуса кликабельности с TextView на содержащий его LinearLayout?

    LeEnot
    @LeEnot
    Енот-андроид
    Вам нужно делать ваш LinearLayout кликабельным:
    yourLinearLayout.setClickable(true);
    Ответ написан
    7 комментариев
  • Как отобразить нужную строку в Spinner из БД sqlite в Android?

    LeEnot
    @LeEnot
    Енот-андроид
    Даже не знаю, как вам ответить - в вашем коде очень много проблем, ни одно решение нормально не вписывается. Допустим, можно так:
    private String loadSpinnerBaudrateData() {
            String selected;
            baudrate = new ArrayList<String>();
            Cursor baudrateCursor = database.query(TABLE_NAME,
                    new String[]{BAUDRATE_ID, BAUDRATE_NAME, BAUDRATE_SELECTED},
                    null, null, null, null,
                    BAUDRATE_NAME);
            baudrateCursor.moveToFirst();
            if (!baudrateCursor.isAfterLast()) {
                do {
                    String name = baudrateCursor.getString(1);
                    if (baudrateCursor.getInt(baudrateCursor.getColumnIndex( BAUDRATE_SELECTED )) == 1){
                          selected = name;
                    }
                    baudrate.add(name);
                } while (baudrateCursor.moveToNext());
            }
            baudrateCursor.close();
            database.close();   // Закрываем БД
            return selected;
        }


    а потом:
    String compareValue = loadSpinnerBaudrateData();
    int spinnerPosition = BaudratedataAdapter.getPosition(compareValue);
    BaudrateSpinner.setSelection(spinnerPosition);

    Но вообще это криво и неправильно...
    Ответ написан
  • Можно ли установить Android Wear на собственное устройство?

    LeEnot
    @LeEnot
    Енот-андроид
    Конечно можно. Исходники Wear доступны в рамках проекта AOSP. Смотреть, например, тут.
    Системные требования аналогичны low-end смартфонам: 4 гб флеша и 512 мб RAM
    Ответ написан
    Комментировать
  • Как правильно закрыть все последовательно открытые друг за другом фрагменты?

    LeEnot
    @LeEnot
    Енот-андроид
    Вы неправильно добавляете фрагменты в стек. Метод transaction.addToBackStack(null), в который вы передаете null должен принимать строку-идентификатор, по которой вы однозначно можете идентифицировать данный фрагмент в стеке. Вернуться в любому помеченному так фрагменту можно так:
    FragmentManager.popBackStack(String name, FragmentManager.POP_BACK_STACK_INCLUSIVE)

    где name как раз та самая строка-идентификатор.
    Вызвав
    FragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE)
    можно очистить весь стек фрагментов.
    Ответ написан
    Комментировать
  • Как правильно вытащить все данные SQlite?

    LeEnot
    @LeEnot
    Енот-андроид
    Наиболее удобно будет просто скопировать файл с базой данных на карту памяти смартфона, не находите? Можно конечно заморочиться с библиотеками типа Jackson или GSON, но ЗАЧЕМ, если все равно придется копировать в доступное юзеру место, т.к. "личное пространство" приложения при удалении тоже удаляется?

    public void exportDatabse(String databaseName) {
            try {
                File sd = Environment.getExternalStorageDirectory();
                File data = Environment.getDataDirectory();
    
                if (sd.canWrite()) {
                    String currentDBPath = "//data//"+getPackageName()+"//databases//"+databaseName+"";
                    String backupDBPath = "backupname.db";
                    File currentDB = new File(data, currentDBPath);
                    File backupDB = new File(sd, backupDBPath);
    
                    if (currentDB.exists()) {
                        FileChannel src = new FileInputStream(currentDB).getChannel();
                        FileChannel dst = new FileOutputStream(backupDB).getChannel();
                        dst.transferFrom(src, 0, src.size());
                        src.close();
                        dst.close();
                    }
                }
            } catch (Exception e) {
    
            }
        }


    Не забыть
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />


    Использование: exportDatabse("Имя базы данных")
    Ответ написан
    4 комментария
  • Нужна книга по программированию под Android 4.4/5?

    LeEnot
    @LeEnot
    Енот-андроид
    Совет: не пытайтесь найти в книгах актуальной информации. Андроид - постоянно и очень быстро развивающаяся платформа, приемы и концепции сменяются в ней очень быстро. Вы можете взять книгу издания 2015, однако окажется, что в печать она ушла в 2014, а писал ее автор вообще в 2012-2013. А тут даже за год может многое поменяться. Android Studio 1.0 вышла в декабре 2014, как вы думаете, может автор за пол-года изучить все, описать, сдать в издательство и обеспечить актуальность информации?
    Плюшки и максимальная оптимизация, это то, чего одной (или даже несколькими) книгами достичь не удастся. Нужно постоянно читать блоги разработчиков и подобные англоязычные ресурсы, чтобы по крупицам собирать информацию. Ни в одном месте нет всего и сразу. Книга может дать только самое общее представление, но для него можно взять практически любую.
    Ответ написан
    Комментировать
  • Как мне это реализовать?

    LeEnot
    @LeEnot
    Енот-андроид
    Перепробовал множество вариантов, не получается выделить при старте, только по клику выделяется. Хотя позиция элемента getCheckedItemPosition() верная.
    Лучшее, что удалось найти - статья, в которой говорится, почему так делать не стоит.
    Ответ написан