Привет дорогой друг, что-то я запозднился с очередным материалом. Ну, не будем о печальном. Рано или поздно у тебя встанет вопрос: а как же правильно стучать? Да, да, именно стучать. Мы сделали запрос-ответ в админку (данные в памяти), а там случилось 404 или еще какая ни будь страшная беда. Данные канули в лету, так как сервис завершился.
Что же делать? Я опишу два способа, но первый будет в качестве примера, а второй покажет Вам, как делать правильно.
Метод плоских файлов
Дописывать в конец файла, а при отправке очищать файл. Структура файла:
{json}n {json}n ......... {json}n
Код чтения всего файла:
File fl = new File(filePath); FileInputStream fin = new FileInputStream(fl); String ret = convertStreamToString(fin); fin.close();
try { FileWriter fw = new FileWriter(filePath, true); fw.write(Value + "n"); fw.close(); } catch (IOException ioe) { }
Тут ничего сложного: читай, пиши. Есть одно “Но”. Мы работаем в потоках, и может случиться одновременная запись и удаление, а это надо контролировать. Но мы же спецы, нам надо сделать чтобы было круто. И мы переходим к базам данных.
Mysqli или как хранить данные по ФенШую
Мы рассмотрим работу с базой данных на примере чтения и записи. У нас простая табличка, где будут ID и StringJSON, которую после отправки мы будем очищать.
public class KNOCKERDatabase extends SQLiteOpenHelper { private static final int DATABASE_VERSION = 1; private static final String DATABASE_NAME = "knocker"; private static final String TABLE_KNOCKER = "knocker"; private static final String KEY_ID = "id"; private static final String KEY_JSON = "stringjson"; public KNOCKERDatabase(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } @Override public void onCreate(SQLiteDatabase db) { String CREATE_TABLE = "CREATE TABLE " + TABLE_KNOCKER + "(" + KEY_ID + " INTEGER PRIMARY KEY," + KEY_JSON + " TEXT," + ")"; db.execSQL(CREATE_TABLE); } void addJson(String json) { SQLiteDatabase db = this.getWritableDatabase(); ContentValues values = new ContentValues(); values.put(KEY_JSON, json); db.insert(TABLE_KNOCKER, null, values); db.close(); } public List<String> getAllJson() { List<String> jsons = new ArrayList<String>(); String selectQuery = "SELECT * FROM " + TABLE_KNOCKER; SQLiteDatabase db = this.getWritableDatabase(); Cursor cursor = db.rawQuery(selectQuery, null); if (cursor.moveToFirst()) { do { jsons.add(cursor.getString(1)); } while (cursor.moveToNext()); } return jsons; } public void deleteRows(String num) { SQLiteDatabase db = this.getWritableDatabase(); String del ="delete from " + TABLE_KNOCKER + " where " + KEY_ID + " in (select " + KEY_ID + " from " + TABLE_KNOCKER + " order by _id LIMIT " + num + ");"; db.execSQL(del); db.close(); } public int getCount() { String countQuery = "SELECT * FROM " + TABLE_KNOCKER; SQLiteDatabase db = this.getReadableDatabase(); Cursor cursor = db.rawQuery(countQuery, null); cursor.close(); return cursor.getCount(); } }
Теперь можно перейти к практике, как это использовать.
Шаг первый. Запись.
KNOCKERDatabase db = new KNOCKERDatabase(context); db.addJson(DATA);
Где DATA – это запрос для отправки на сервер.
Шаг второй. Чтение.
KNOCKERDatabase db = new KNOCKERDatabase(this);
List<String> jsons = db.getAllJson();
После прочтения записей, считаем их количество (через getCount), чтобы не удалить лишнее и избавляемся от них через deleteRows.
Всем хороших отстуков.
Предыдущие части материала:
Как написать вирус для Андроид. Часть 3
Как написать вирус для андроид. Часть 2
Как написать вирус для андроид.
Вирусы для андроид — Taidoor, IXESHE и СozyDuke
2 comments On Как написать вирус для Андроид. Часть 4
Pingback: Как написать вирус для Андроид. Часть 5 - Cryptoworld ()
Pingback: Как взломать платное приложение на Android - Cryptoworld ()