#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[]
, оно возвращает aBitmap
. Как вы пытались вернуть массив?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