Вирусы под Android. №4 (Как правильно стучать)

Тема в разделе "Вирусология", создана пользователем waydam, 12 окт 2016.

  1. waydam

    waydam

    Сообщения:
    464
    Баллы:
    16
    Привет дорогой друг, что-то я запозднился с очередным материалом. Ну, не будем о печальном. Рано или поздно у тебя встанет вопрос: а как же правильно стучать? Да, да, именно стучать. Мы сделали запрос-ответ в админку (данные в памяти), а там случилось 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.

    Всем хороших отстуков.

    5ая часть:

Поделиться этой страницей

Top