• Как посмотреть log приложения android, когда оно не было подключено к отладчику?

    @vitvov
    guevara: не понял вопрос сразу. В AndroidStudio, в окне logcat есть с правой стороны выпадающий список с фильтрами. Нажимаете на него, выбираете пункт "Edit" и создаёте свой фильтр.
  • Как хранить изображения в sqlite android?

    @vitvov
    У меня есть два приложения. Одно для учета расходов и доходов, второе специфичный дневник. Оба эти приложения НЕ хранят картинки. Но я планирую добавить, например для того, чтоб можна было прикрепить чек или фото покупки к расходу или фотку в дневник. Понятно, что хранить в базе слишком накладно по памяти и пути самое то. Но оба этих приложения имеют возможность резервного простым клонированием файла БД на флешку. При переносе такого файла картинки не перенесутся. Думал либо зиповать картинки + файл БД, либо ещё есть вариант, попробовать хранить пути в гугл драйв, но не разбирался ещё с апи.
  • Как хранить изображения в sqlite android?

    @vitvov
    А как правильно делать резервные копии таких данных ? Паковвть картинки вместе с базой в один архив ?
  • У всех задержки обновления статистики в Google Play Developer Console?

    @vitvov
    >> Печалит, что я вижу, что приложение падает в поиске, но я не могу посмотреть, как сильно упало количество установок.
    Если хотите отслеживать приложение более детально и даже в реальном времени, можете прикрутить в приложение google analytics https://www.google.com/analytics/ . Там есть очень много интересного, например ошибки возникающие в приложении, количество времени проведенное пользователем на конкретном экране, процент использования по странам и много другого. Задержка обновления 1 день. Возможно у вас возникает ошибка в приложен из за этого его рейтинг падает. Аналитика тут может помочь.
    Кроме google analytics есть и другие подобные сервисы, но я пользовался только ею.
  • Почему упала стоимость клика в adMob / adSense?

    @vitvov Автор вопроса
    Спасибо. В принципе всё верно.
    Но, параллельно пробую сделать эксперимент, а именно - отключил медийные объявления и оставил только текстовые. В итоге количество кликов резко упало но цена за клик выросла до $0.07 - $0.09, это не решает проблему и по сумме денег всё равно меньше того что было раньше, и меньше того, что было при многократных кликах по дешёвой рекламе. Эксперимент ещё продолжается, но скорее всего, что придется включить обратно медийные объявления.
  • Какие причины потери данных в sqlite на android?

    @vitvov Автор вопроса
    Спасибо. Буду изучать подробнее эту тему.
  • Какие причины потери данных в sqlite на android?

    @vitvov Автор вопроса
    Пример для open:
    public class SingletonDbHelper {
    	private MultiThreadSQLiteOpenHelper dbHelper;
    	public static final SingletonDbHelper INSTANCE = new SingletonDbHelper();
    
    	private SingletonDbHelper() {
    	}
    
    	public SQLiteDatabase open(Context context) {
    		synchronized (this) {
    			//Logger.INSTANCE.debug(TAG, "asking for opening");
    			if (dbHelper == null) {
    				dbHelper = new DBHelper(context);
    			}
    			return dbHelper.getWritableDatabase(); 
    		}
    	}
    
    	public void close() {
    		synchronized (this) {
    			//Logger.INSTANCE.debug(TAG, "asking for closing");
    			if (dbHelper != null) {
    				// Ask for closing database
    				if (dbHelper.closeIfNeeded()) {
    					dbHelper = null; 
    				}
    			}
    		}
    	}
    }
  • Какие причины потери данных в sqlite на android?

    @vitvov Автор вопроса
    Для каждой таблицы у меня есть примерно такой класс:
    public class TableCostProvider {
            // ...
    	public static double getAllCostSum(Context context) {
    		SQLiteDatabase db = SingletonDbHelper.INSTANCE.open(context
    				.getApplicationContext());
    		//	Достаем все результаты, и группируем их по валютам
    		Cursor c = db.query(DBHelper.table_cost, new String[] {
    				DBHelper.cost_currency, "SUM(" + DBHelper.cost_sum + ")" },
    				null, null, DBHelper.cost_currency, null, null);
    		double value = .0;
    		while (c.moveToNext()) {
    			int currencyId = c.getInt(0);
    			double sum = c.getDouble(1);
    			// получаем валюту
    			Cursor currencyCur = db.query(DBHelper.table_currency,
    					new String[] { DBHelper.currency_rate },
    					DBHelper.currency_id + "=" + currencyId, null, null, null,	null);
    
    			if (currencyCur.moveToFirst()) {
    				value += sum / currencyCur.getDouble(0);
    			}
    			currencyCur.close();
    		}
    		SingletonDbHelper.INSTANCE.close();
    		c.close();
    		return value;
    	}
            // ...
    }


    Код вызовова этих функций примерно такой:
    @Override
    	protected void onResume() {
                    //...
    		fillData();
                    //...
           }
           void fillData() {
    		//...
    		double sumCost = TableCostProvider.getAllCostSum(this);
    	}
  • Какие причины потери данных в sqlite на android?

    @vitvov Автор вопроса
    Для каждой таблицы у меня есть примерно такой класс:
    public class TableCostProvider {
    
    
    	public static long addCost(Context context, Date date, int category,
    			double sum, int currency, String comment) {
    		SQLiteDatabase sqdb = SingletonDbHelper.INSTANCE.open(context
    				.getApplicationContext());
    		ContentValues row = new ContentValues();
    		row.put(DBHelper.cost_datetime, date.getTime());
    		row.put(DBHelper.cost_category, category);
    		row.put(DBHelper.cost_sum, sum);
    		row.put(DBHelper.cost_currency, currency);
    		row.put(DBHelper.cost_comment, comment);
    		long d = sqdb.insert(DBHelper.table_cost, null, row);
    		SingletonDbHelper.INSTANCE.close();
    		return d;
    	}
    }
  • Какие причины потери данных в sqlite на android?

    @vitvov Автор вопроса
    Возможно проблема в использовании сингелтона для БД. Буду разбираться.
  • Какие причины потери данных в sqlite на android?

    @vitvov Автор вопроса
    Да. Версия всего 2, поэтому я и не делаю проверку, а в onCreate() как раз создаю сразу БД версии 2. Этот код работает уже более 6 месяцев, думаю, что тут скорее всего нет проблем.
  • Какие причины потери данных в sqlite на android?

    @vitvov Автор вопроса
    Есть. Но текущая версия базы, всего лишь 2. Хотя ваше сообщение навело меня на мысль о том, может ли быть багом ситуация, когда я не проверяю номер старой и новой версии, считая, что так, как oldVersion == 1 а newVersion == 2 то нет смысла проверять?
  • Какие причины потери данных в sqlite на android?

    @vitvov Автор вопроса
    То есть мой DBHelper просто наследует MultiThreadSQLiteOpenHelper вместо простого SQLiteOpenHelper
  • Какие причины потери данных в sqlite на android?

    @vitvov Автор вопроса
    Работа с данными происходить через MultiThreadSQLiteOpenHelper https://github.com/d4rxh4wx/MultiThreadSQLiteOpenHelper . Запись в базу делаю примерно так:
    public static long addCost(Context context, Date date, int category, double sum, int currency, String comment) {
    		SQLiteDatabase sqdb = SingletonDbHelper.INSTANCE.open(context
    				.getApplicationContext());
    		ContentValues row = new ContentValues();
    		row.put(DBHelper.cost_datetime, date.getTime());
    		row.put(DBHelper.cost_category, category);
    		row.put(DBHelper.cost_sum, sum);
    		row.put(DBHelper.cost_currency, currency);
    		row.put(DBHelper.cost_comment, comment);
    		long d = sqdb.insert(DBHelper.table_cost, null, row);
    		SingletonDbHelper.INSTANCE.close();
    		return d;
    	}


    Обновление БД делается стандартным способом для SQLOpenHelper: onCreate и onUpgrade
  • Какие причины потери данных в sqlite на android?

    @vitvov Автор вопроса
    Спасибо. Такое конечно может быть, но часто пользователи говорят что они просто обновились и ничего не трогали. То есть мне интересна ситуация когда пользователь не виноват