Поведение по умолчанию с Джерси, когда есть статус ошибки (4xx, 5xx), заключается в использовании сервлета Response.sendError
, что приводит к переадресации на страницу с ошибкой. Поскольку нет страницы с ошибкой, это приводит к 404.
Мы можем изменить это поведение, установив свойство Jersey
blockquote>
ServerProperties.RESPONSE_SET_STATUS_OVER_SEND_ERROR
Вы можете сделать это в своем подклассе
ResourceConfig
public JerseyConfig extends ResourceConfig { public JerseyConfig() { property(ServerProperties.RESPONSE_SET_STATUS_OVER_SEND_ERROR, true); } }
Или (с помощью Spring Boot) вы можете добавить его в свой
application.properties
файл.spring.jersey.init.jersey.config.server.response.setStatusOverSendError=true
Я заметил то же самое сообщение об ошибке, используя фрагмент кода, предоставленный с документацией Environment.getExternalStoragePublicDirectory .
Код работает нормально, как и ожидалось, и делает новый файл видимым в галерее устройства , но в то же время печатает ошибку о leaked ServiceConnection
.
Глядя на внутренний код Android в MediaScannerConnection
, кажется, что существует какой-то механизм для остановки службы после последнего файла. Может быть, это не работает, когда дается только один файл?
Я решил использовать совершенно другое решение, сообщив MediaScanner через Intent. Это тоже хорошо работает и не выдает никаких предупреждений:
Intent mediaScannerIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
Uri fileContentUri = Uri.fromFile(permFile); // With 'permFile' being the File object
mediaScannerIntent.setData(fileContentUri);
this.sendBroadcast(mediaScannerIntent); // With 'this' being the context, e.g. the activity
Кажется, что это предпочтительный способ, поскольку он также упоминается в Android-обучении о съемке фотографий .
У меня была эта проблема с распознавателем голоса, когда я менял раскладки и т. Д. Все, что мне нужно было сделать, это добавить unregisterReceiver, что-то вроде этого в onActivityResult:
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
unregisterReceiver(mReceiver);
super.onDestroy();
}
Надеюсь, это поможет!
Используйте вместо этого getApplicationContext()
.