2017-09-01 36 views
-1

請我需要幫助我需要發送此模型與圖像使用改造,但它不工作它的工作使用郵遞員在截圖中,所以我能做些什麼來解決這個問題如何上傳圖像與json是從模型序列化使用改造android

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

這種模式,我需要在同一個模型添加圖像使用改裝發送這樣

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);} 

這是我創建的請求主體

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 { 
       } 
      })); 

這是郵遞員與後端和它的使用郵遞員

Image

回答

0

我不喜歡的東西,你在我的項目,這是我的第一個Android項目在做什麼時工作正常。

我有一個形象,我試圖把它發送到服務器旁邊的json爲多,這是我做的事:

首先,我創建了像一個文件:

File img = new File(avatar); 

其化身是一個地址到一個文件。

然後我創建了一個RequestBody對象,如:

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

然後用我的改造對象調用obj我這樣做:

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 
} 

而且我registerNewUser是這樣的:

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

我希望我的回答對你有幫助。

+0

非常感謝您的回覆,這很有幫助,但我需要更高級的東西,我的模型中有另一個對象,比如尺寸(寬度 - 高度 - 長度),所以我應該讓模型中的每個字段都像我在那裏做的一樣是不是比我更容易發送模型和改造使這項工作?提前致謝 –