• VLMI - форум по обмену информацией. На форуме можете найти способы заработка, разнообразную информацию по интернет-безопасности, обмен знаниями, курсы/сливы.

    После регистрации будут доступны основные разделы.

    Контент форума создают пользователи, администрация за действия пользователей не несёт ответственности, отказ от ответственности. Так же перед использованием форума необходимо ознакомиться с правилами ресурса. Продолжая использовать ресурс вы соглашаетесь с правилами.
  • Подпишись на наш канал в Telegram для информации о актуальных зеркалах форума: https://t.me/vlmiclub

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

waydam

Резидент
Сообщения
332
Реакции
336
0 руб.
Telegram
Привет дорогой друг, что-то я запозднился с очередным материалом. Ну, не будем о печальном. Рано или поздно у тебя встанет вопрос: а как же правильно стучать? Да, да, именно стучать. Мы сделали запрос-ответ в админку (данные в памяти), а там случилось 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ая часть: http://vlmi.top/threads/virusy-pod-android-5-flora-i-fauna.2156/
 
Последнее редактирование:
Сверху Снизу