Для работы с кэшем по параметрам внутри устройства создайте приложение «CashByParamActivity», в котором используются методы, реализованные в модулях RequestAPI и DatabaseAPI.
Перед созданием приложения убедитесь, что доступен ресурс в источнике данных PostgreSQL. Таблица содержит информацию о фруктах и состоит из трёх колонок: «id», «name», «description».
Приложение посылает запрос к таблицам «fruits_get» и «fruits_insert_delete», которые обращаются к одной и той же базе данных и таблице на удалённом сервере PostgeSQL. Таблица «fruits_get» запрашивает и сохраняет данные на мобильном устройстве. Таблица «fruits_insert_delete» удаляет и добавляет строки на удалённом сервере. В ответ возвращается обновлённая таблица.
Сохранение данных зависит от передаваемых параметров:
при передаче одинаковых параметров или отсутствии параметров данные сохраняются одну таблицу;
при передаче разных параметров данные сохраняются в новую таблицу с наименованием таблицы и хеша параметров.
Приложение «CashByParamActivity» состоит из одного экрана, области ввода текста и кнопок:
«TableStreamWithoutParam». Добавление таблицы;
«TableStreamInsert». Добавление строки в таблицу;
«TableStreamDelete». Удаление строки из таблицы;
«GetTableName». Получение наименования таблицы;
«DropCache». Удаление таблицы.
Область ввода текста содержит идентификатор строки «10001» по умолчанию.
Для просмотра результата работы приложения используйте интерактивный пример:
Примечание. Сохраните базу данных с мобильного устройства на компьютер и используйте SQLiteStudio для контроля действий.
Нажмите кнопку «TableStreamWithoutParam».
public class CashByParamActivity extends AppCompatActivity {
private static final String MY_URL = "http://testmasterfmp.fsight.cloud/";
private static final VersionAPI MY_VERSION_API = VersionAPI.V_1;
private static final String MY_ENVIRONMENT = "Leonid_environment";
private static final String MY_PROJECT = "Leonid_project";
private static final String MY_VERSION = "v1";
private static final String MY_LOGIN = "Leonid";
private static final String MY_PASSWORD = "123123";
private static final String TAG = "CashByParamActivity";
private static final String MY_RESOURCE_FRUITS_GET = "fruits_get";
private static final String MY_RESOURCE_FRUITS_INSERT_DELETE = "fruits_insert_delete";
private HyperHive hyperHive;
private TextView textView;
private EditText editText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_cash_by_param);
textView = findViewById(R.id.text_view_cash_by_param);
editText = findViewById(R.id.edit_text_cash_by_param);
editText.setText("10001");
Handler uiHandler = new Handler();
hyperHive = new HyperHiveState(getApplicationContext())
.setHostWithSchema(MY_URL)
.setApiVersion(MY_VERSION_API)
.setEnvironmentSlug(MY_ENVIRONMENT)
.setProjectSlug(MY_PROJECT)
.setVersionProject(MY_VERSION)
.setHandler(uiHandler)
.buildHyperHive();
auth();
}
public void auth() {
String status = hyperHive.authAPI.auth(MY_LOGIN, MY_PASSWORD, true).execute().toString();
showDate(status);
}
public void tableStreamWithoutParam(View view) {
String baseStatus = hyperHive.requestAPI.tableStream(MY_RESOURCE_FRUITS_GET).execute();
showDate(baseStatus);
}
public void tableStreamInsert(View view) {
TableStreamCallParams tableStreamCallParams = new TableStreamCallParams();
String str = editText.getText().toString();
String json = "{\"upsert_rows\": [[\"" + str + "\", \"apple" + str + "\"]], \"delete_ids\": null}";
tableStreamCallParams.setData(json);
Log.d(TAG, "tableStreamInsert: " + json);
BaseStatus baseStatus = hyperHive.requestAPI.tableStream(MY_RESOURCE_FRUITS_INSERT_DELETE, tableStreamCallParams, BaseStatus.class).execute();
showDate(baseStatus.toString());
Log.d(TAG, "tableStreamInsert: " + baseStatus.isOk());
}
public void tableStreamDelete(View view) {
TableStreamCallParams tableStreamCallParams = new TableStreamCallParams();
String str = editText.getText().toString();
String json = "{\"upsert_rows\": null, \"delete_ids\": [[\"" + str + "\"]]}";
tableStreamCallParams.setData(json);
Log.d(TAG, "tableStreamDelete: " + json);
BaseStatus baseStatus = hyperHive.requestAPI.tableStream(MY_RESOURCE_FRUITS_INSERT_DELETE, tableStreamCallParams, BaseStatus.class).execute();
showDate(baseStatus.toString());
Log.d(TAG, "tableStreamDelete: " + baseStatus.isOk());
}
public void getTableName(View view) {
String str = editText.getText().toString();
String json = "{\"upsert_rows\": [[\"" + str + "\", \"apple" + str + "\"]], \"delete_ids\": null}";
RootClass rootClass = hyperHive.databaseAPI.getTablesName(MY_RESOURCE_FRUITS_INSERT_DELETE, json, RootClass.class).execute();
showDate(rootClass.resultClass.databaseClass.recordsClass.get(0).name);
}
public void dropCache(View view) {
String str = editText.getText().toString();
String json = "{\"upsert_rows\": [[\"" + str + "\", \"apple" + str + "\"]], \"delete_ids\": null}";
String status = hyperHive.databaseAPI.dropCache(MY_RESOURCE_FRUITS_INSERT_DELETE, json).execute();
showDate(status);
}
private void showDate(String status) {
Log.d(TAG, "showDate: " + status);
textView.setText(status);
}
class RootClass extends BaseStatus {
@Expose
@SerializedName("result")
ResultClass resultClass;
class ResultClass {
@Expose
@SerializedName("database")
DatabaseClass databaseClass;
}
class DatabaseClass {
@Expose
@SerializedName("records")
ListrecordsClass;
}
class RecordsClass {
@Expose
@SerializedName("name")
String name;
}
}
}
См. также:
Примеры использования Android-фреймворка | Примеры работы с ресурсами