Я следую примеру передачи файлов на странице Nearby Connections Exchange (фрагмент кода "более сложный пример").
Я могу отправить изображение и получить его на другом устройстве в папке Download / Nearby. Изображение отправлено успешно, так как, если бы я изменил имя файла, чтобы дать ему соответствующее расширение (например, .jpg), я могу открыть изображение в приложении фотогалереи.
private void processFilePayload(long payloadId) {
Payload filePayload = completedFilePayloads.get(payloadId);
String filename = filePayloadFilenames.get(payloadId);
if (filePayload != null && filename != null) {
completedFilePayloads.remove(payloadId);
filePayloadFilenames.remove(payloadId);
// Retrieve received file from Downloads folder
Payload.File payloadFile2 = filePayload.asFile();
File payloadJavaFile = payloadFile2.asJavaFile();
if (payloadJavaFile == null) {
Log.d(TAG, "Payload java file is null in processFilePayload()");
} else {
payloadJavaFile.renameTo(new File(payloadJavaFile.getParentFile(), filename));
}
}
}
Почему переменная payloadJavaFile равна нулю? Из анализа Payload.class я знаю, что результатом asJavaFile () является обнуляемый файл и что из описания метода asJavaFile () , вызов asJavaFile () в processFilePayload () из onPayloadReceived () (как это сделано в примере на странице API) может привести к тому, что файл еще не получит все содержимое полезной нагрузки. Однако я также вызываю processFilePayload () из onPayloadTransferUpdate () после проверки успешности PayloadTransferUpdate, и поэтому на этом этапе полезная нагрузка не должна получить все свое содержимое (и не должна быть нулевой при вызове asJavaFile () в полезной нагрузке). объект)?
Мой код практически совпадает с документацией для отправки и получения изображения и имени файла.