2017-09-01 2 views
-1

S'il vous plaît j'ai besoin d'aide j'ai besoin d'envoyer ce modèle avec image en utilisant rétrofit mais ça ne fonctionne pas en utilisant postier comme dans la capture d'écran alors que puis-je faire pour résoudre cette questionComment télécharger une image avec json qui est sérialisé à partir du modèle en utilisant Android retrofit

public class Package implements Comparable<Package>, Parcelable { 
@SerializedName("id") 
public String ID; 
@SerializedName("name") 
public String title; 
@SerializedName("description") 
public String description; 
@SerializedName("value")} 

ce modèle que je dois ajouter une image sur le même modèle à envoyer à l'aide de travaux de modernisation de cette

public interface ApiInterface { 
@Multipart 
@Headers("Content-Type: multipart/form-data") 
@POST("packages/add") 
Single<Result<AddPackageResponseModel>> addPackage(@Part("image") RequestBody image, 
                @Part("json") RequestBody addPackageModel, 
                @Query("token") String token);} 

c'est comment je créé le corps de la demande

File imageFile = ImageHelper.convertBitmapToFile(addPackageModel.getImage(), "image", context); 
    RequestBody packageImageFileRequestBody = RequestBody.create(MediaType.parse("multipart/form-data"), imageFile); 
    Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create(); 
    String addPackageModelJSON = gson.toJson(addPackageModel); 

    RequestBody addPackageJSONRequestBody = RequestBody.create(MediaType.parse("multipart/form-data"), addPackageModelJSON); 

    compositeDisposable.add(addPackageInteractor.addPackage(packageImageFileRequestBody, 
      addPackageJSONRequestBody, token) 
      .subscribeOn(Schedulers.io()) 
      .observeOn(AndroidSchedulers.mainThread()) 
      .subscribe(new Consumer<Result<AddPackageResponseModel>>() { 
       @Override 
       public void accept(@NonNull Result<AddPackageResponseModel> responseResult) throws Exception { 
         if (responseResult.response().body() != null) { 
          addPackageView.addPackageSuccess(); 
         } 
        } 
      }, new Consumer<Throwable>() { 
       @Override 
       public void accept(@NonNull Throwable throwable) throws Exception { 
       } 
      })); 

c'est postier avec back-end et il fonctionne très bien lorsque vous utilisez postier

Image

Répondre

0

Je l'ai fait quelque chose comme ce que vous faites dans mon projet qui était mon premier projet Android.

j'avais une image et j'ai essayé de l'envoyer au serveur aux côtés de mon JSON comme multipart et ce fut ce que je faisais:

D'abord, je créé un fichier comme:

File img = new File(avatar); 

qui avatar est un adresse à un fichier.

Ensuite, je crée un objet RequestBody comme:

RequestBody requestFile= RequestBody.create(MediaType.parse("multipart/form-data"), img); 
MultipartBody.Part body =null; 
if(avatar!="") 
    body = MultipartBody.Part.createFormData("avatar", img.getName(), requestFile); 

ensuite avec mon objet Retrofit appelé obj Je l'ai fait:

obj.registerNewUser(RequestBody.create(MediaType.parse("text/plain"),user.getUserName()) 
        ,RequestBody.create(MediaType.parse("text/plain"),user.getFullName()) 
        ,body,RequestBody.create(MediaType.parse("text/plain"),user.getPassword())).enqueue(new Callback<Data.User>() {... 
//handle the response with onResponse and onFailure functions 
} 

Et mon registerNewUser était comme ça:

@Multipart 
    @POST("user/register/") 
    Call<Data.User> registerNewUser(@Part("username") RequestBody username, @Part("fullname") RequestBody fullname, @Part MultipartBody.Part avatar, @Part("password") RequestBody password); 

J'espère que ma réponse vous a été utile.

+0

merci beaucoup pour votre réponse, c'est utile mais j'ai besoin de quelque chose de plus avancé j'ai un autre objet dans mon modèle comme dimension (largeur - hauteur - longueur) donc devrais-je obtenir tous les champs dans mon modèle est rien de plus facile que cela où je peux envoyer le modèle et retrofit faire cet effort? Merci d'avance –