Я хочу показать процент загрузки - PullRequest
0 голосов
/ 23 декабря 2018

У меня есть приложение, которое пользователи могут загружать файлы.Прямо сейчас это работает.Они могут загружать файлы и получать их на стороне сервера.Теперь я хочу показать процент загрузки пользователям при загрузке.Я использовал приведенный ниже код для загрузки файлов на сервер.

вот мой java-код:

        send.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                try{
                    new MaterialFilePicker().
                            withActivity(AddActivity.this).
                            withRequestCode(10).
                            start();


                }
                catch (Exception e){
                    return;
                }
            }
        });

и это мой метод:

ProgressDialog progress;

@Override
protected void onActivityResult(int requestCode, int resultCode, final Intent data) {
    if (requestCode==10 && resultCode==RESULT_OK){


        progress = new ProgressDialog(AddActivity.this);
        progress.setTitle("Uploading");
        progress.setMessage("please wait...");
        progress.show();


        Thread t = new Thread(new Runnable() {
            @Override
            public void run() {
                File f = new File(data.getStringExtra(FilePickerActivity.RESULT_FILE_PATH));
                String content_type = getMimeType(f.getPath());
                String file_path = f.getAbsolutePath();

                file_size = String.valueOf(f.length()/1024);

                OkHttpClient client = new OkHttpClient();
                RequestBody file_body = RequestBody.create(MediaType.parse(content_type),f);

                RequestBody request_body = new MultipartBody.Builder()
                        .setType(MultipartBody.FORM)
                        .addFormDataPart("type",content_type)
                        .addFormDataPart("upload_file",code+file_path.substring(file_path.lastIndexOf(".")),file_body)
                        .build();

                code2 = code+file_path.substring(file_path.lastIndexOf("."));

                Request request = new Request.Builder()
                        .url("http://api.mysite.com/api/uploadfile")
                        .post(request_body)
                        .build();

                try {
                    Response response = client.newCall(request).execute();

                    Log.d("msg",request_body.toString());
                    Log.d("msg",f.getPath().toString());
                    Log.d("msg",getMimeType(f.getPath()));
                    Log.d("msg33",code+file_path.substring(file_path.lastIndexOf(".")));

                    if (!response.isSuccessful()){
                        throw new IOException(("Error:"+response));
                    }
                    progress.dismiss();

                } catch (IOException e) {
                    e.printStackTrace();
                }

            }


        });
        t.start();
    }
}

Пожалуйста, помогите мне добавить процент загрузки.
Спасибо

1 Ответ

0 голосов
/ 23 декабря 2018

Вы делаете много неправильных вещей здесь:

  1. Логика, отвечающая за загрузку файла, не должна быть расположена в onActivityResult()
  2. Вы должны разделить его на другой метод
  3. Использование подобного потока не очень хорошая идея

Если вы хотите загрузить файл или большой файл, вы должны сделать это в классе IntentService (Вам нужно будет создать свой собственный класс ирасширение IntentService), это то, что предназначено для таких вещей.Я предлагаю Вам узнать о Retrofit2 и библиотеке OkHttp, потому что это сделает ее намного проще.

Пример, где вы можете найти один из способов сделать это, приведен здесь: Возможно ли этопоказывать индикатор выполнения при загрузке изображения через Retrofit 2?

Просьба, чтобы ppl в stackoverflow написал полный код для вас, не является хорошим способом улучшить ваши навыки.Проверьте эту ссылку, которую я Вам дал.

Удачи

РЕДАКТИРОВАТЬ:

Службы Android: http://www.vogella.com/tutorials/AndroidServices/article.html и https://developer.android.com/training/run-background-service/create-service

Retrofit 2: http://www.vogella.com/tutorials/Retrofit/article.html

OkHttp: https://www.journaldev.com/13629/okhttp-android-example-tutorial

Пример: Можно ли отобразить индикатор выполнения при загрузке изображения с помощью Retrofit 2?

Эта ссылка предоставляет всю информацию, необходимую для написания этой функции.У меня нет видео на YouTube с такими вещами.Я никогда не использую YouTube для получения такой информации.

...