Я создаю свое первое android приложение, и одна из функций, которые я хочу создать, - это сделать снимок с помощью камеры и загрузить его.
Фотосъемка работает отлично. Я столкнулся с проблемой при загрузке изображений. Ниже приведен код:
public void uploadFileToS3() {
String ACCESS_KEY = "XXX";
String SECRET_KEY = "AAAAAAAA";
String MY_BUCKET = "abcede";
AmazonS3 s3 = new AmazonS3Client( new BasicAWSCredentials( ACCESS_KEY, SECRET_KEY ) );
java.security.Security.setProperty( "networkaddress.cache.ttl", "60" );
s3.setRegion( Region.getRegion( Regions.AP_SOUTH_1 ) );
s3.setEndpoint( "https://s3-ap-southeast-1.amazonaws.com/" );
TransferUtility transferUtility = new TransferUtility( s3, getApplicationContext() );
File storageDir = getExternalFilesDir( DIRECTORY_PICTURES );
String path = getExternalFilesDir( DIRECTORY_PICTURES ).getAbsolutePath();
String[] files = storageDir.list();
int fileCount = storageDir.listFiles().length;
// Log.i("File count: ", Integer.toString(fileCount));
// Log.i("Path :", path);
// if (fileCount > 0) {
// Log.i("Images :", Arrays.toString(files));
// }
if (fileCount > 0) {
for (int i = 0; i <= fileCount; i++) {
String file = files[i];
File uploadToS3 = new File( path );
TransferObserver transferObserver = transferUtility.upload( MY_BUCKET, file, uploadToS3 );
transferObserver.setTransferListener( new TransferListener() {
@Override
public void onStateChanged(int id, TransferState state) {
Toast.makeText( getApplicationContext(), "State Change:" + state, Toast.LENGTH_SHORT ).show();
}
@Override
public void onProgressChanged(int id, long bytesCurrent, long bytesTotal) {
int percentage = (int) (bytesCurrent / bytesTotal * 100);
Toast.makeText( getApplicationContext(), "Upload Status : " + percentage + "%", Toast.LENGTH_SHORT ).show();
}
@Override
public void onError(int id, Exception ex) {
Log.e( "error", "error" );
}
} );
}
}
}
Строки, которые я закомментировал, отображают правильное количество файлов, имен файлов и т. Д. c. указывая на изображения есть в пути. Но загрузка не удалась.
Вывод Log.i приведен ниже:
2020-04-04 17:09:27.271 10393-10393/com.example.syncsqlite I/Images :: [ra_surf_sureshentp_ShelfParasite_20200404_163437_1893453067.jpg, ra_surf_sureshentp_ShelfParasite_20200404_164914_264777191.jpg, ra_surf_sureshentp_ShelfStrip_20200404_164927_776603691.jpg, ra_surf_sureshentp_ShelfParasite_20200404_165322_1281651413.jpg, ra_surf_sureshentp_ShelfStrip_20200404_165334_1705528733.jpg, ra_surf_sureshentp_ShelfParasite_20200404_170004_1323441500.jpg, ra_surf_sureshentp_ShelfStrip_20200404_170014_80431959.jpg]
2020-04-04 17:14:12.620 10526-10526/com.example.syncsqlite I/Path :: /storage/emulated/0/Android/data/com.example.syncsqlite/files/Pictures
2020-04-04 17:14:12.620 10526-10526/com.example.syncsqlite I/File count:: 7
Но я не могу загрузить изображения, и программа завершается с ошибкой:
java.lang.ArrayIndexOutOfBoundsException: length=7; index=7
at com.example.syncsqlite.welcome.uploadFileToS3(welcome.java:377)
Строка 377 обозначает эту строку:
String file = files[i];