Qual a maneira correta de usar o flush(); e sleep(); em um foreach?

Fiz uma página em php para gerar um relatório de vendas no formato .csv através do WooCommerce no sistema WordPress.

<?php 
//incluir as funções principais do WordPress
require("/home/site/public_html/wp-blog-header.php");
require_once("/home/site/public_html/wp-config.php");
require_once("/home/site/public_html/wp-includes/wp-db.php");
?>

<?php
$order_statuses = array( 'wc-completed');

$customer_orders = wc_get_orders( array (
    'date_completed' => '2020-09-14...2020-09-15',
    'meta_key' => '_customer_user',
    'post_status' => $order_statuses,
    'orderby' => 'date',
    'order' => 'ASC',
    'numberposts' => -1,
) );
$myfile1 = fopen("/home/site/public_html/shop/report/2020.csv", "w") or die("Erro ao abrir relatório!<br>");
fwrite($myfile1, ""Data","Pedido","Item","Categoria","Quant.","Valor","Pagamento","Usuário"r");
echo '<table><tbody>
        <tr>
            <th><strong>Data</strong></th>
            <th><strong>Pedido</strong></th>
            <th><strong>Item</strong></th>
            <th><strong>Categoria</strong></th>
            <th><strong>Quant.</strong></th>
            <th><strong>Valor</strong></th>
            <th><strong>Pagamento</strong></th>
            <th><strong>Usuário</strong></th>
            </tr>';

foreach($customer_orders as $order ){

    $order_id = method_exists( $order, 'get_id' ) ? $order->get_id() : $order->id;

    foreach($order->get_items() as $item_id => $item){

    $product_id = method_exists( $item, 'get_product_id' ) ? $item->get_product_id() : $item('product_id');

    if( method_exists( $item, 'get_data' ) ) {
         $item_data = $item->get_data();
         $pedido = $item_data('order_id');
         $item_name = $item->get_name();
         $produto = $item_data('product_id');
         $quantity = $item_data('quantity');
         $total = $item_data('total');
         $total=str_replace(".", ",", $total);
         $pgto=$order->payment_method_title;
         $order_date_modified=$order->date_completed;
         $data=date_format($order_date_modified, "d/m/Y H:i:s");
         $userid=$order->customer_user;
         $user_info = get_userdata($order->user_id);
         $usuario = $user_info->user_login;
         //$email=$order->billing_email;
    } else {
         $total = wc_get_order_item_meta( $item_id, '_line_total', true );
    }

        foreach( wp_get_post_terms( $produto, 'product_cat' ) as $term ){
            if( $term ){
                $categoria = $term->name;
            }
        }
        
        echo '<tr><td>'.$data.'</td>';
        echo '<td>#'.$pedido.'</td>';
        echo '<td>'.$item_name.'</td>';
        echo '<td>'.$categoria.'</td>';
        echo '<td>'.$quantity.'</td>';
        echo '<td>'.$total.'</td>';
        echo '<td>'.$pgto.'</td>';
        echo '<td>'.$usuario.'</td>';
        
        fwrite($myfile1,""$data","$pedido","$item_name","$categoria","$quantity","$total","$pgto","$usuario"r");
        
        flush();
        sleep(1);
    
    }
}

fclose($myfile1);
echo '</tbody></table>';
?>

Adicionei o flush(); e sleep(1); após a gravação de cada linha no arquivo .csv, pois desejo que a tabela seja criada na página do navegador, conforme acontece no exemplo abaixo. onde uma linha aparece a cada segundo:

<?php

    for($i=1;$i<=10;$i++){
        echo 'processing...<br>';
        flush();
        sleep(1);
    }
?>

Porém a página que criei processa todas as informações de uma só vez e não aos poucos como esperado.

Estou buscando alternativas para gravar os dados sem receber um erro de timeout, pois quando executamos o script para puxar todos os pedidos deste ano o processo é interrompido sem apresentar nenhum erro.

Como eu posso pegar o resultado do imc para e colocar em outra TextView??? Eu tentei dessa maneira

 public void btCalcularIMC(View v){
        float altura, peso, imc;
        altura = Float.parseFloat(edAltura.getText().toString());
        peso = Float.parseFloat(edPeso.getText().toString());

        imc = peso / (altura*2);

        tvResultado.setText(String.format("%.2f", imc));

        try {
            int classific = Integer.parseInt(tvResultado.getText().toString());
            if (0 > 18.5) {
                tvResultado.setText("Você está abaixo de peso + imc +");
            } else if (18.6 >= 24.9) {
                tvResultado.setText("Você está no peso ideal (PARABÉNS) + imc +  ");
            } else if (25 >= 29.9) {
                tvResultado.setText("Levemente acima do peso + imc +  ");
            } else if (30.0 >= 34.9) {
                tvResultado.setText("Obseidade grau 1 + imc + ");
            } else if (35.0 >= 39.9) {
                tvResultado.setText("Obesidade grau 2 (Severa) + imc + ");
            } else {`insira o código aqui`
                tvResultado.setText("Obesidade grau 3 (Mórbido) + imc +");
            }

java – Melhor maneira de fazer CRUD em banco de dados externo android studio?

Olá, sou iniciante em desenvolvimento para android, utilizo o Android Studio em Java. Minha principal dúvida hoje é sobre a realização de CRUD em banco de dados “externo”.

Um exemplo na prática:
O usuário do aplicativo escolherá o produto que deseja e fará o pedido. Esse pedido terá que aparecer também para o lojista (seja em outro aplicativo ou em uma página web, utilizando o mesmo banco de dados).

O que tentei até agora:
Cheguei a usar aguma coisa que vi, se não me engano, no github. Não me lembro o nome ao certo, mas acho que era Koush Ion. E agora estou utilizando um tal de Volley. O Volley chama uma página web (com ou sem parâmetros) e recebe também o retorno desta página.

Notei que quando testei o Volley em uma rede mais lenta, ele chamava a página mais de uma vez, ou então não exibia retorno. Então minhas dúvidas são essas: Estou no caminho certo? Teria alguma forma “melhor” ou “mais segura” de fazer isso? Qual a maneira mais utilizada por essas grandes aplicações e por vocês?

android – Qual a maneira correta de recuperar um ArrayList do cloud firestore?

Estou usando o seguinte código para tentar recuperar um ArrayList do firestore:

List<Long> longs = (List<Long>) task.getResult().getDocuments().get(i.get()).get("longsArray");

Entretanto não estou certo de estar fazendo isto da maneira correta, pois estou recendo o seguinte erro:

    Process: com.exemplifique.project, PID: 14521
    java.lang.RuntimeException: Could not deserialize object. Class java.util.ArrayList has generic type parameters, please use GenericTypeIndicator instead```