Возврат строки Java []

#java #android #arrays #string

#java #Android #массивы #строка

Вопрос:

Я застрял на проблеме с возвратом целого String[] :

 ArrayList<File> Files = (ArrayList<File>) data.getSerializableExtra(FILES_TO_UPLOAD); //file array list
String [] files_paths = new String[5]; //string array
int i = 0;
for(File file : Files){
  //String fileName = file.getName();
  String uri = file.getAbsolutePath();
  files_paths[i] = uri.toString(); //storing the selected file's paths to string array files_paths
  i  ;
}
return BitmapFactory.decodeFile(files_paths[0]);
 

Проблема в том, что мне нужно вернуть все пути к файлам, но я действительно не знаю, как это сделать.
В этом случае я возвращаю только [0] .
return не может быть for() . Как мне это сделать?

Весь метод

   private Bitmap decodeSingleBitmapFromIntent(Intent data) {
ArrayList<File> Files = (ArrayList<File>) data.getSerializableExtra(FILES_TO_UPLOAD); //file array list
            String [] files_paths = new String[5]; //string array

            int i = 0;

            for(File file : Files){
                //String fileName = file.getName();
                String uri = file.getAbsolutePath();
                files_paths[i] = uri.toString(); //storing the selected file's paths to string array files_paths

                i  ;
            }
        return BitmapFactory.decodeFile(files_paths);
    }

    private void displayImage(ImageView image, Bitmap bitmap) {
        Bitmap output = returnOriginalOrScaleIfToBig(bitmap);
        image.setImageBitmap(output);
    }
 

Комментарии:

1. Почему вы не возвращаете files_paths переменную, потому что это то, что вы хотите сделать?

2. Я пытался Error:(325, 41) error: incompatible types: String[] cannot be converted to String

3. Это даже не пытается вернуть a String[] , оно возвращает a Bitmap . Как вы пытались вернуть массив?

4. Теперь его private String[] и вернуть files_paths; приложение разбилось, когда оно переходит к возврату с Failure delivering result ResultInfo{who=null, request=1, result=-1, data=Intent

Ответ №1:

Как вы заявили, что вам нужно вернуть все пути к файлам, вам нужно использовать:
return files_paths;
Не:
return BitmapFactory.decodeFile(files_paths[0]);
или
return files_paths[0]; // или любой другой индекс, отличный от 0

Ваша функция также должна иметь возвращаемый тип String[] .
Возможно, вы также захотите использовать класс ArrayList, поскольку он облегчит выполнение других операций с вашими данными.

Кроме того, я заметил, что вы назвали самую первую переменную в коде с помощью верхнего регистра. Это соглашение используется для объявления класса и не должно использоваться для переменных. Для переменных вы должны сохранить первую букву в нижнем регистре.

Ответ №2:

Вопрос, который вы опубликовали, не согласуется с написанным вами кодом….

вы говорите, что возвращаете путь с индексом 0, но в коде я вижу

 return BitmapFactory.decodeFile(files_paths[0]);
 

это означает, что вы возвращаете a Bitmap из пути к файлу с индексом 0

совершенно разные вещи…

если вы хотите, чтобы возвращались все пути, измените тип возврата метода на

 String[]
 

и return files_paths; вместо растрового изображения

Ответ №3:

Обновить:

сигнатура метода изменяется с Bitmap -> Bitmap[] (растровый массив)

 //notice the change in the signature
private Bitmap[] decodeSingleBitmapFromIntent(Intent data) {
        ArrayList<File> Files = (ArrayList<File>) data.getSerializableExtra(FILES_TO_UPLOAD); //file array list
        String [] files_paths = new String[5]; //string array

        Bitmap[] bitmapArray = new Bitmap[5];

        int i = 0;

        for(File file : Files){
            //String fileName = file.getName();
            String uri = file.getAbsolutePath();
            files_paths[i] = uri.toString(); //storing the selected file's paths to string array files_paths

            // decode each individual file, save reference in array
            bitmapArray[i] = BitmapFactory.decodeFile(files_paths[i]);

            i  ;
        }

        //return the complete array
        return bitmapArray;
    }
 

Вы должны изменить возвращаемый тип используемого вами метода и вернуть Bitmap[]

ie

если ваш метод объявлен следующим образом:

 public Bitmap getImage(){...}
 

вместо этого можно было бы объявить возврат растрового массива:

 public Bitmap[] getImages(){...}
 

теперь вы сможете вернуть все растровые изображения, которые в вашем Bitmap[] (растровом массиве) состоят из нескольких Bitmap

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

Комментарии:

1. Я вставил весь метод, а как насчет Bitmap , нет String ?

2.По-прежнему ничего Error:(324, 16) error: incompatible types: String[] cannot be converted to Bitmap[] Error:(349, 54) error: incompatible types: Bitmap[] cannot be converted to Bitmap

3. Error:(347, 54) error: incompatible types: Bitmap[] cannot be converted to Bitmap

4. несовместимые типы: String[] не может быть преобразован в Bitmap[] означает, что где-то вы пытаетесь сохранить этот новый результат в своей старой переменной, которая была готова для сохранения массива строк ‘Bitmap [] не может быть преобразован в Bitmap’ означает, что вы также пытаетесь сохранить результат этого метода, которыйявляется ли Bitmap[] BitmapArray

5. ‘Bitmap [] не может быть преобразован в Bitmap’ означает, что вы также пытаетесь сохранить результат этого метода, который является Bitmap [] BitmapArray внутри переменной типа Bitmap