Загрузка нескольких типов файлов для синтаксического анализа базы данных с использованием ошибки ввода-вывода uri

У меня есть приложение, использующее Parse-Server в качестве бэкэнда, которое я использую через back4app. База данных, которую предоставляет parse-server, - это база данных моего приложения.

Я слежу за следующими документами: https://docs.parseplatform.org/android/guide/#files

В моем приложении есть несколько кнопок загрузки файлов во фрагменте. Мое приложение принимает файлы .pdf, изображений и файлов .doc. Однако, когда я пытаюсь сохранить вновь созданные файлы синтаксического анализа с помощью saveDataInBackground (), я получаю ошибку ввода-вывода.

Мой код, как показано ниже:

В моем фрагменте я получаю с помощью onActivityResult

  public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        switch (requestCode) {
            case 1:
                if (resultCode == RESULT_OK) {
                    binding.cross1.setVisibility(View.VISIBLE);

                    Uri uri = data.getData();
                    String uriString = uri.toString();
                    File myFile = new File(uriString);

                    parseFiles[0] = (new ParseFile(myFile));

                    String displayName = null;

                    if (uriString.startsWith("content://")) {
                        Cursor cursor = null;
                        try {
                            cursor = getActivity().getContentResolver().query(uri, null, null, null, null);
                            if (cursor != null && cursor.moveToFirst()) {
                                displayName = cursor.getString(cursor.getColumnIndex(OpenableColumns.DISPLAY_NAME));
                            }
                        } finally {
                            cursor.close();
                        }
                    } else if (uriString.startsWith("file://")) {
                        displayName = myFile.getName();
                    }

                    binding.file1.setText(displayName);
                }
                break;
            case 2:
                if (resultCode == RESULT_OK) {
                    binding.cross2.setVisibility(View.VISIBLE);
                    Uri uri = data.getData();
                    String uriString = uri.toString();
                    File myFile = new File(uriString);

                    parseFiles[1] = (new ParseFile(myFile));

                    String displayName = null;

                    if (uriString.startsWith("content://")) {
                        Cursor cursor = null;
                        try {
                            cursor = getActivity().getContentResolver().query(uri, null, null, null, null);
                            if (cursor != null && cursor.moveToFirst()) {
                                displayName = cursor.getString(cursor.getColumnIndex(OpenableColumns.DISPLAY_NAME));
                            }
                        } finally {
                            cursor.close();
                        }
                    } else if (uriString.startsWith("file://")) {
                        displayName = myFile.getName();
                    }

                    binding.file2.setText(displayName);
                }
                break;
            case 3:
                if (resultCode == RESULT_OK) {
                    binding.cross3.setVisibility(View.VISIBLE);
                    Uri uri = data.getData();
                    String uriString = uri.toString();
                    File myFile = new File(uriString);

                    parseFiles[2] = (new ParseFile(myFile));

                    String displayName = null;

                    if (uriString.startsWith("content://")) {
                        Cursor cursor = null;
                        try {
                            cursor = getActivity().getContentResolver().query(uri, null, null, null, null);
                            if (cursor != null && cursor.moveToFirst()) {
                                displayName = cursor.getString(cursor.getColumnIndex(OpenableColumns.DISPLAY_NAME));
                            }
                        } finally {
                            cursor.close();
                        }
                    } else if (uriString.startsWith("file://")) {
                        displayName = myFile.getName();
                    }

                    binding.file3.setText(displayName);
                }
                break;
        }
    }

И в своей деятельности я пытаюсь сохранить файлы parseFiles как таковые.

 ArrayList<ParseFile> parseFiles = new ArrayList<>();


            for (int i = 0; i < adapter.getFragmentJobSample().getParseFiles().length; i++) {
                if (adapter.getFragmentJobSample().getParseFiles()[i] != null){
                    parseFiles.add(adapter.getFragmentJobSample().getParseFiles()[i]);
                }
            }


            entity.put("fileOne", parseFiles.get(0));
            entity.put("fileTwo", parseFiles.get(1));
            entity.put("fileThree", parseFiles.get(2));

            for (int i = 0; i < parseFiles.size(); i++) {
                try {
                    parseFiles.get(i).save();
                } catch (ParseException e) {
                    Toast.makeText(this, "e" + e.getMessage(), Toast.LENGTH_SHORT).show();
                }
            }

            // Saves the new object.
            // Notice that the SaveCallback is totally optional!
            entity.saveInBackground(e -> {
                if (e == null) {
               

 //Save was done
                Toast.makeText(this, "success!", Toast.LENGTH_SHORT).show();
                finish();
            } else {
                //Something went wrong
                Toast.makeText(this, e.getMessage(), Toast.LENGTH_SHORT).show();
            }
        });

Мне пришлось использовать .save (), потому что мне нужно сохранить сразу несколько файлов. Я думал, что использовать .saveInBackground () для этого нецелесообразно. Должен ли я использовать вместо этого .saveInBackground ()?


person Sanjid Chowdhury    schedule 07.03.2021    source источник
comment
However, when I try to save the newly created parse files .. Что такое файл синтаксического анализа? И вдруг вы экономите. Ok. Но тогда почему ты в теме про закачку говоришь?   -  person blackapps    schedule 07.03.2021
comment
File myFile = new File(uriString); Нет смысла использовать класс File в вашем красивом uri. Посмотрите на значение uriSting. Пожалуйста скажи.   -  person blackapps    schedule 07.03.2021
comment
Я отредактировал свой вопрос для большей ясности   -  person Sanjid Chowdhury    schedule 07.03.2021
comment
Понятия не имею, что ты наделал. Лучше бы ты сделал то, что я просил.   -  person blackapps    schedule 07.03.2021


Ответы (1)


Сначала вам нужно преобразовать его в байтовый массив. Для этого перейдите по этой ссылке ниже: Uri изображения для bytesarray

После этого просто свяжите его со своим файлом следующим образом:

byte[] data = "Working at Parse is great!".getBytes();
ParseFile file = new ParseFile("resume.txt", data);

Затем попробуйте сохранить этот файл, он должен работать.

person Tanzim Chowdhury    schedule 07.03.2021
comment
Это работает отлично, однако вы можете сказать мне, почему это не работает, когда я инициализирую parseFile с помощью new ParseFile (new File (uriString))? - person Sanjid Chowdhury; 07.03.2021
comment
parseplatform.org/Parse-SDK-JS/api/master/ Parse.File.html Может параметры должны быть в одной последовательности? Например, имя, затем данные. Я не уверен, так что нужно проверить - person Tanzim Chowdhury; 07.03.2021
comment
Но в любом случае всегда лучше следовать официальной документации для конкретного SDK. - person Tanzim Chowdhury; 07.03.2021