Обновление Progressbar на пользовательском интерфейсе внутри цикла - PullRequest
0 голосов
/ 09 ноября 2018

Раз и навсегда я хочу достичь этого. У меня есть запрос строки, который выглядит так

StringRequest stringRequest = new StringRequest(Request.Method.POST, MASTER_LINK,
            new Response.Listener<String>() {
                @RequiresApi(api = Build.VERSION_CODES.KITKAT)
                @Override
                public void onResponse(String response) {
                    try {
                        JSONObject obj = new JSONObject(response);
                        JSONArray received_data = obj.getJSONArray("received");
                        if (received_data.length() == 0) {
                            /* TODO : Check what to do in this universe later */
                        } else {

                        }
                    } catch (JSONException e) {
                        e.printStackTrace();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
        }
    }) {
        @Override
        protected Map<String, String> getParams() throws AuthFailureError {
            Map<String, String> params = new HashMap<>();
            params.put("email", current_email);
            return params;
        }
    };
    VolleySingleton.getInstance(this).addToRequestQueue(stringRequest);
}

То, что приведенный выше код будет делать, это создать запрос из php-файла, используя параметр email Что дальше, так это то, что он создаст CSV-файл из SELECT и после этого вернет массив json с именем received с данными done_cus

После этого, если значение было возвращено, он загрузит этот файл и этот код будет

if (done_process.toString().matches("done_cus")) {
    FilePathname_CUS = sdCardDirectory + "/" + for_current_email + "_" + param_dim_customer + ".csv";
    file_link = download_file + for_current_email + "_" + param_dim_customer + ".csv";
    DownloadFilesname(FilePathname_CUS, file_link);
    row_count = row_count + count_row(FilePathname_CUS);
    count_customer = 1;
    Log.e("Downloaded", "Customer List");
}

Пожалуйста, посмотрите на это count_row, что он будет делать, чтобы посчитать, сколько строк в этом файле, так что давайте скажем, у нас есть 1000 строк, так что, если у меня есть 5, то с каждой 1k строк, то 5k

это следующее, что я сделаю, я вставлю это в мой SQLLite

File file = new File(FilePathname_CUS);
CsvReader csvReader = new CsvReader();
try (CsvParser csvParser = csvReader.parse(file, StandardCharsets.UTF_8)) {
    CsvRow row;
    if (count_row(FilePathname_CUS) != 0) {
        myDb.delete_customer(current_email);
        while ((row = csvParser.nextRow()) != null) {
            myDb.insert_customer(
                    row.getField(0),
                    row.getField(1),
                    row.getField(2),
                    row.getField(3),
                    row.getField(4),
                    row.getField(5),
                    row.getField(6),
                    row.getField(7),
                    row.getField(8),
                    row.getField(9),
                    row.getField(10)
            );
            Log.e("Inserting", "" + row.getField(0));
            index++;
            p = (float) index / (float) row_count;
            p = p * (float) 100;
        }

    } else {

    }
}

Обратите внимание на эту часть

index++;
p = (float) index / (float) row_count;
p = p * (float) 100;

это как процент, как этот 99% теперь, после всех объяснений, вот мой вопрос.

Как мне индикатор выполнения с этим значением?

Вот мой индикатор

mProgressAnimation.setProgress("Value of the v");

потому что я вижу, что индикатор выполнения будет обновляться только после цикла. Как насчет цикла?

Вот весь код

StringRequest stringRequest = new StringRequest(Request.Method.POST, MASTER_LINK,
            new Response.Listener<String>() {
                @RequiresApi(api = Build.VERSION_CODES.KITKAT)
                @Override
                public void onResponse(String response) {
                    try {
                        JSONObject obj = new JSONObject(response);
                        JSONArray received_data = obj.getJSONArray("received");
                        if (received_data.length() == 0) {
                            /* TODO : Check what to do in this universe later */
                        } else {
                            if (done_process.toString().matches("done_cus")) {
                                FilePathname_CUS = sdCardDirectory + "/" + for_current_email + "_" + param_dim_customer + ".csv";
                                file_link = download_file + for_current_email + "_" + param_dim_customer + ".csv";
                                DownloadFilesname(FilePathname_CUS, file_link);
                                row_count = row_count + count_row(FilePathname_CUS);
                                count_customer = 1;
                                Log.e("Downloaded", "Customer List");
                            }

                            File file = new File(FilePathname_CUS);
                            CsvReader csvReader = new CsvReader();
                            try (CsvParser csvParser = csvReader.parse(file, StandardCharsets.UTF_8)) {
                                CsvRow row;
                                if (count_row(FilePathname_CUS) != 0) {
                                    myDb.delete_customer(current_email);
                                    while ((row = csvParser.nextRow()) != null) {
                                        myDb.insert_customer(
                                                row.getField(0),
                                                row.getField(1),
                                                row.getField(2),
                                                row.getField(3),
                                                row.getField(4),
                                                row.getField(5),
                                                row.getField(6),
                                                row.getField(7),
                                                row.getField(8),
                                                row.getField(9),
                                                row.getField(10)
                                        );
                                        Log.e("Inserting", "" + row.getField(0));
                                        index++;
                                        p = (float) index / (float) row_count;
                                        p = p * (float) 100;
                                        mProgressAnimation.setProgress(p); //this must be update the progress bar
                                    }

                                } else {

                                }
                            }
                        }
                    } catch (JSONException e) {
                        e.printStackTrace();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
        }
    }) {
        @Override
        protected Map<String, String> getParams() throws AuthFailureError {
            Map<String, String> params = new HashMap<>();
            params.put("email", current_email);
            return params;
        }
    };
    VolleySingleton.getInstance(this).addToRequestQueue(stringRequest);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...