改造 - @Body参数不能与表单或多部分编码一起使用。 (参数#1)

时间:2016-05-02 07:22:00

标签: android retrofit

我想将本地图库图像发送到api。我已将图像添加为多部分类型文件,并且iam也在同一个api中发送一些字符串数据作为多部分类型字符串。

所以当我点击api时我得到了这个回复。

  

@Body参数不能与表单或多部分编码一起使用。 (参数#1)

我的代码:

                //Add the values into Multipart.
                MultipartTypedOutput multipartTypedOutput = new MultipartTypedOutput();
                //Add the ACCESS_TOKEN
                //MULTIPLEIMAGE
                multipartTypedOutput.addPart(Constants.LOGO_IMAGE, new TypedFile("image/*", new File("" + encodedByte)));
                //Add the ACCESS_TOKEN
                multipartTypedOutput.addPart(Constants.COMPANY_NAME, new TypedString(companyName));
                multipartTypedOutput.addPart(Constants.TAGS, new TypedString(projectTags));
                multipartTypedOutput.addPart(Constants.PROJECT_DESC, new TypedString(projectDesc));
                multipartTypedOutput.addPart(Constants.CATEGORY, new TypedString(categories));
                multipartTypedOutput.addPart(Constants.STYLE, new TypedString(launchStyle));
                multipartTypedOutput.addPart(Constants.COLOR_CODE, new TypedString(colorCode));
                multipartTypedOutput.addPart(Constants.CONTEST_PACK, new TypedString(contestPackage));
                multipartTypedOutput.addPart(Constants.PAYMENT_GATE, new TypedString(paymentGateway));
                multipartTypedOutput.addPart(Constants.USERID, new TypedString(userId));
                if (connectionDetector.isOnline()) {
                    apiManager.getApiService().launchApi(multipartTypedOutput, new LaunchCallback(LaunchStep4Fragment.this));
                } else {
                    Toast.makeText(getActivity(), getString(R.string.check_internet), Toast.LENGTH_SHORT).show();
                }

接口方法

/**
 * @param multipartTypedOutput
 * @param callback
 */
@FormUrlEncoded
@POST(Constants.STORE_CONTEST)
void launchApi(@Body MultipartTypedOutput multipartTypedOutput , Callback<LaunchResponse> callback);

在api方面,他们将一切都变成了一个字符串。那么它是否取决于参数类型或代码问题?

我应该改变什么来获得结果?

如果我做错了,请有人解释一下。

2 个答案:

答案 0 :(得分:1)

使用Retrofit 2

@Headers({
        "Accept: application/json",
})
@Multipart
@POST("upload")
Call<ResponseBody> uploadImage(@Part("picture\"; filename=\"picture") RequestBody picture, @Part("company_name") RequestBody company_name);

答案 1 :(得分:0)

尝试删除@FormUrlEncoded我删除了同样的错误@FormUrlEncoded并且有效

 //@FormUrlEncoded
    @POST("saveOgrYoklama")
    Call<YoklamaStatus> sendYoklamaList2(@Body Yoklama yoklama);

我试图发送到服务器的内容

enter image description here