android – 带有@multipart的Retrofit @body有问题

前端之家收集整理的这篇文章主要介绍了android – 带有@multipart的Retrofit @body有问题前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
图像Multipart在类类型对象中.

案例1.(我做过的)

服务参数:

{"id":"1","name":"vishal","image/file":""}

那时我的改造API

@Multipart
@POST("webservice")
Call<SignUpResp> loadSignupMultipart(@Part("description") RequestBody description,@Part MultipartBody.Part file,@QueryMap HashMap<String,String> params);

情况2.(我遇到问题)@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"}
    }
}

我正在尝试这个API

@Multipart
 @POST("webservice")
 Call<SubmitLevel1Part2IconResp> loadLevel1halfIconswithImage(@Part("description") RequestBody description,@Body UploadwithImage uploadImage);

Java方面

/**
     * 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);

我不知道为什么,但它返回错误,如:

“@Body parameters cannot be used with form or multi-part encoding”

任何帮助,将不胜感激.

解决方法

简单来说,我这样做了:

我改变了tested

Call<Result> resultCall = service.uploadImage(body);

调用<结果> resultCall = service.uploadImage(body,result);结果是什么

我的API的Result.java类(Response):

public class Result {

    @SerializedName("result")
    @Expose
    private String result;

    public String getValue() {
        return value;
    }

    public void setValue(String value) {
        this.value = value;
    }

    @SerializedName("value")
    @Expose
    private String value;

    /**
     * @return The result
     */
    public String getResult() {
        return result;
    }

    /**
     * @param result The result
     */
    public void setResult(String result) {
        this.result = result;
    }

}

并创建对象,如:

Result result = new Result();
result.setResult("success");
result.setValue("my value");

您可以根据需要更改类,然后在发送请求时传递对象.所以你的ApiService课程就像:

ApiService.java

/**
 * @author Pratik Butani on 23/4/16.
 */
public interface ApiService {

    /*
    Retrofit get annotation with our URL
    And our method that will return us the List of Contacts
    */
    @Multipart
    @POST("upload.PHP")
    Call<Result> uploadImage(@Part MultipartBody.Part file,@Part("result") Result result);

}

和我的PHP代码是:

<?PHP

    $file_path = "";
    $var = $_POST['result']; //here I m getting JSON

    $file_path = $file_path . basename( $_FILES['uploaded_file']['name']);
    if(move_uploaded_file($_FILES['uploaded_file']['tmp_name'],$file_path)) {
        $result = array("result" => "success","value" => $var);
    } else{
        $result = array("result" => "error");
    }

    echo json_encode($result);

?>

希望它能帮到你.谢谢.

猜你在找的Android相关文章