Возобновление загрузки ресурса

В мобильном приложении настраиваются параметры возобновления загрузки ресурса с сохранением состояния:

Если во время загрузки ресурса произошла ошибка или разрыв соединения с сервером мобильной платформы, мобильное приложение будет выполнять повторные попытки запроса ресурса.

Для получения табличных данных кэша по параметрам с сервера мобильной платформы с загрузкой в базу данных создайте приложение «TableStreamActivity», в котором используется метод tableStream, реализованный в модуле RequestAPI.

Примечание. Приложение аналогично приложению «TableStreamSapActivity».

Перед созданием приложения убедитесь, что доступен ресурс в источнике данных PostgreSQL. Таблица содержит информацию о фруктах и состоит из трёх колонок: «id», «name», «description».

Приложение «TableStreamActivity» состоит из одного экрана и кнопки:

Для просмотра результата работы приложения используйте интерактивный пример:

Нажмите кнопку «TABLESTREAM».

public class TableStreamActivity 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 MY_RESOURCE = "Leonid_postgreSQL";
    private static final String TAG = "TableStreamActivity";
 
    private HyperHive hyperHive;
    private TextView textView;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_table_stream);
        textView = findViewById(R.id.text_view_table_stream);
 
        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();
        authentication();
    }
 
    public void authentication() {
        boolean status = hyperHive.authAPI.auth(MY_LOGIN, MY_PASSWORD, true).execute().isOk();
        showStatus(status);
    }
 
    public void tableStream(View view) {
        // Создадим параметры для запроса TableStreamCallParams
        TableStreamCallParams tableStreamCallParams = new TableStreamCallParams();
        String params = "{\"upsert_rows\": null ,\"delete_ids\": null}"; // не обновляем и не удаляем строки
        tableStreamCallParams.setData(params);
        tableStreamCallParams.setRetryCount(10);
        tableStreamCallParams.setRetryIntervalSec(1);
 
        // Отправим запрос tableStream
        hyperHive.requestAPI.tableStream(MY_RESOURCE, tableStreamCallParams).execute(); // передадим наименование таблицы
 
        // Получим таблицу из источника данных
        TableStreamStatus queryRequest = hyperHive.databaseAPI.getTablesName(MY_RESOURCE, tableStreamCallParams.getData(), TableStreamStatus.class).execute();
        // queryParams...statements содержит список SELECT запросов для соответствующих параметров params
        // В данном примере один возможный вариант
        String response = hyperHive.databaseAPI.query(queryRequest.request.source.database.statements[0], StatusSelectTable.class).execute().toString();
        textView.setText(response);
    }
 
    public void showStatus(boolean status) {
        Log.d(TAG, "auth: " + status);
        Toast.makeText(this, "auth: " + status, Toast.LENGTH_LONG).show();
    }
}
 
class TableStreamStatus extends BaseStatus {
    @Expose
    @SerializedName("request")
    public Request request;
}
 
class Request {
    @Expose
    @SerializedName("source")
    public Source source;
}
 
class Source {
    @Expose
    @SerializedName("database")
    public Database database;
}
 
class Database {
    @Expose
    @SerializedName("name")
    public String name;
    @Expose
    @SerializedName("statements")
    public String[] statements;
}

См. также:

Примеры использования Android-фреймворка | Примеры работы с ресурсами