J'utilise RxJava dans un job evernote pour envoyer des données à l'API. Ce code fonctionnait très bien jusqu'à maintenant. Le problème est quelque part dans le .filter
Je pense qu'il est même pas apprendre à getApiService().createReport(requestModel)
méthode à moins que des photos dans le modèle (alors report.getImages()
n'est pas null
.RxJava .filter bloque l'envoi de données par d'autres codes à l'API
public static Observable<Report> createReport(CreateReportModel model) {
return Observable.just(model)
.filter(report -> report.getImages() != null)
.flatMap(report -> {
return Observable.from(report.getImages())
.map(photoModel -> {
return photoModel;
})
.filter(photoModel -> photoModel.hasImage())
.filter(photoModel -> photoModel.getImage().exists())
.flatMap(photoModel -> uploadFile(photoModel)).toList();
})
.map(photoModels -> model)
.flatMap(requestModel -> {
return getApiService().createReport(requestModel)
.map(response -> {
return response;
});
});
}
Cette fonction est appelée dans ce code
Et ici, il va à Result.SUCCESS
mais la réponse n'est pas obtenir et le rapport n'est pas créé sur back end.J'inquiète est que ce code fonctionnait très bien il y a quelques jours, et sans aucun changement il a arrêté
[EDIT]
J'ai cette fonction qui est appelée dans le premier flatMap, et elle est utilisée pour envoyer les photos.
@NonNull
private static Observable<? extends CreatePalletPhotoModel> uploadPalletFile(CreatePalletPhotoModel photo) {
MultipartBody.Part fileBody = Paperless.createFileBody(photo.getImage());
return Paperless.getApiService().uploadPalletPhoto(fileBody)
.map(upload -> {
photo.setPalletStatus(upload.getPalletStatus());
photo.setImage(upload.getImage());
return photo;
});
}
alors qu'est-ce qui ne fonctionne pas exactement? Vous avez raison de dire que le service api ne sera pas appelé si les éléments sont filtrés. – hgrey
S'il n'y a pas d'images alors le premier '.flatMap' ne devrait pas s'exécuter (c'est pour envoyer les photos) mais le second' .flatMap' est pour l'envoi du rapport et ça devrait marcher (ça ne marche pas). 'return getApiService(). createReport (requestModel)' n'est jamais appelé. – Claire