Rénovation @corps avec @multipart avoir de Problème
Image en plusieurs parties dans le type de classe d'objet.
cas 1. (Ce que j'avais fait)
Service params:
{"id":"1","name":"vishal","image/file":""}
À cette époque, ma API
de Retrofit
@Multipart
@POST("webservice")
Call<SignUpResp> loadSignupMultipart(@Part("description") RequestBody description, @Part MultipartBody.Part file, @QueryMap HashMap<String, String> params);
le cas 2. (Où j'ai un Problème) avec @Body class<UploadwithImage>
{
"methodName":"submitLevel1Part2Icon",
"userid":"150",
"headerData":{
"fiction":{
"icon_type":"1",
"icon_id":"3"},
"nonfiction":{
"icon_type":"2",
"icon_id":"4"},
"relation":{
"icon_type":"3",
"icon_id":"0",
"name":"Ronak",
"relative_image":"<File>",
"relation_id":"3"},
"self":{
"icon_type":"4",
"icon_id":"0"}
}
}
Je suis en train d'essayer cette API
@Multipart
@POST("webservice")
Call<SubmitLevel1Part2IconResp> loadLevel1halfIconswithImage(@Part("description") RequestBody description, @Part MultipartBody.Part file, @Body UploadwithImage uploadImage);
Java côté
/**
* code for multipart
*/
//create RequestBody instance from file
RequestBody requestFile = RequestBody.create(MediaType.parse("multipart/form-data"), fileUpload);
//MultipartBody.Part is used to send also the actual filename
MultipartBody.Part body = MultipartBody.Part.createFormData("methodName[headerData][relation][relative_image]", fileUpload.getName(), requestFile);
//add another part within the multipart request
String descriptionString = "hello, this is description speaking";
RequestBody description = RequestBody.create(MediaType.parse("multipart/form-data"), descriptionString);
call = service.loadLevel1halfIconswithImage(description, body, levelOneHalfIcons);
Je ne sais pas pourquoi, mais elle renvoie l'erreur comme:
"@Corps des paramètres ne peut pas être utilisé avec la forme ou multi-codage"
Toute Aide serait Appréciée.
Aucune solution pour le cas 2?
J'ai essayé beaucoup mais je n'ai pas de succès pour que donc, je l'ai mis dans la poubelle 😛 @Jatin
J'ai eu la solution, vous devez utiliser PartMap HashMap<String,RequestBody>
mais thatonly travail lorsque plusieurs images. en même objet
J'ai plusieurs fichiers vidéo et son dans les intérieurs objets json
J'ai essayé beaucoup mais je n'ai pas de succès pour que donc, je l'ai mis dans la poubelle 😛 @Jatin
J'ai eu la solution, vous devez utiliser PartMap HashMap<String,RequestBody>
mais thatonly travail lorsque plusieurs images. en même objet
J'ai plusieurs fichiers vidéo et son dans les intérieurs objets json
OriginalL'auteur Vishal Patel | 2016-05-06
Vous devez vous connecter pour publier un commentaire.
De changer votre mode de
Maintenant pour créer votre les paramètres de la demande,
Dans le cas où vous ne souhaitez pas utiliser PartMap, vous pouvez tout simplement passer comme paramètres. Vérifier ma réponse https://stackoverflow.com/a/37052548/1320616 pour obtenir des précisions sur l'envoi de fichier d'image avec la demande.
Je ne suis pas sûr, mais autant que je sache, je ne pense pas que c'est possible. Multipart demandes toujours les données du formulaire au lieu de requestBody. Ici, vous essayez d'envoyer un fichier à l'intérieur d'un json. Vous ne pensez qu'il est possible de joindre un fichier au format json. Je ne pense pas que vous pouvez même reproduire cette demande d'api en facteur ou certains autres reste client.
Grâce Ankit, après beaucoup de temps, mon problème s'est résolu par votre réponse.
Merci bro...
OriginalL'auteur Ankit Aggarwal
Comme moyen simple, j'ai fait comme ceci:
J'ai testé en changeant
à
Call<Result> resultCall = service.uploadImage(body, result);
où résultat estResult.java classe (Réponse) de mon API:
et créé des objets comme:
Vous pouvez modifier votre classe selon votre besoin, puis passer de l'objet lorsque vous envoyer la demande. Si votre ApiService classe sera comme:
ApiService.java
et Mon code PHP est:
Espère qu'il vous aide à vous. Merci.
Tout fonctionne très bien. Le problème se pose lors de l'ajout
@Part MultipartBody.Part file
. Il jetteExpected BEGIN_OBJECT but was STRING at line 1 column 1 path $
. NOTE: je suis à l'aide personnaliséeconverterFactory
(par la mise en œuvre de Gson). Pourrait-il être un problème?Vérifiez votre réponse dans les deux cas, vous obtenez l'erreur côté serveur.
oui, merci c'était le problème. Résolu )
Et une question de plus. Connaissez-vous une solution pour envoyer l' @la partie de l'objet (Objet de Résultat, dans votre cas) sous forme de JSON pas comme paramètre POST?
OriginalL'auteur Pratik Butani AndroidDev
Vous pouvez également utiliser un
Map
avecRequestBody
de la valeur et de la chaîne de touches pour ajouter des paramètres et vous pouvez envoyer ce à l'aide de plusieurs parties etPartMap
.Vérifier le code suivant, j'espère que ça aidera :
OriginalL'auteur user4042384
Il suffit de suivre la façon dont le navigateur web est en train de faire en plusieurs parties. Ils ont mis clés imbriquées dans les "[]" et de donner des clés aux images trop.
Puis en java
OriginalL'auteur andylee
Espère que cela vous aide...
J'ai déjà montré ma demande d'échantillon dans ma réponse d'abord commencer avec..
est-ce que le format utilisé pour le serveur php?l ai essayé, mais pas de travail
veuillez vérifier ce post stackoverflow.com/questions/52520520/...
OriginalL'auteur Jatin
https://www.linkedin.com/pulse/retrofit-2-how-upload-multiple-files-server-mahesh-gawale
Je suppose que la meilleure réponse à cette question peut être trouvée ici. Il a fonctionné parfaitement pour moi.
C'est l'exemple de télécharger un tableau de fichiers à l'aide de rénovation dans Android.
C'est la façon dont le service va ressembler
public interface ApiService {
}
C'est la façon dont la classe Client ressembler
public class ApiClient {
public static final String API_BASE_URL = "api de la base de l'url";
}
Télécharger comme cela dans une activité ou un fragment ou d'où vous voulez
ApiService service = ApiClient.createService(ApiService.class);
Remarque: filePaths.taille()Arraylist de ramassage des Images de Chemin.
J'espère que ce post est utile pour vous. veuillez partager vos commentaires comme commentaire ici.
OriginalL'auteur sahan.perera