【问题标题】:Send POST body parameter using Retrofit使用 Retrofit 发送 POST 正文参数
【发布时间】:2019-04-26 15:01:20
【问题描述】:

我有一个 api URL:https://orderingspace.com/api/search 机身参数: 纬度:48.8834553 日志:2.3399433 英里:6

你能告诉我这段代码哪里错了吗:

我的界面类:

public interface SearchAPI {
String BASE_URL = "https://orderingspace.com/api/";
@POST("search")
Call<SearchData> getSearchData(@Header("content-type") String contentType, @Body SearchDataRequest dataRequest);}

我的 SearchData 类(POJO):

public class SearchData {

@SerializedName("status")
@Expose
public String status;
@SerializedName("message")
@Expose
public String message;
@SerializedName("result")
@Expose
public List<Result> result = null;
class Result {

    @SerializedName("id")
    @Expose
    public String id;
    @SerializedName("rname")
    @Expose
    public String rname;
    @SerializedName("email_address")
    @Expose
    public String emailAddress;
    @SerializedName("city")
    @Expose
    public String city;
    @SerializedName("address")
    @Expose
    public String address;
    @SerializedName("owner")
    @Expose
    public String owner;
    @SerializedName("user")
    @Expose
    public String user;
    @SerializedName("phone1")
    @Expose
    public String phone1;
    @SerializedName("phone2")
    @Expose
    public String phone2;
    @SerializedName("rest_images")
    @Expose
    public String restImages;
    @SerializedName("fax")
    @Expose
    public String fax;
    @SerializedName("status")
    @Expose
    public String status;
    @SerializedName("payment")
    @Expose
    public String payment;
    @SerializedName("acc_payment")
    @Expose
    public String accPayment;
    @SerializedName("delivery_type")
    @Expose
    public String deliveryType;
    @SerializedName("payment_process")
    @Expose
    public String paymentProcess;
    @SerializedName("delivery_time")
    @Expose
    public String deliveryTime;
    @SerializedName("delivery_area")
    @Expose
    public String deliveryArea;
    @SerializedName("receive_order")
    @Expose
    public String receiveOrder;
    @SerializedName("notify")
    @Expose
    public String notify;
    @SerializedName("email_radio")
    @Expose
    public String emailRadio;
    @SerializedName("email_image")
    @Expose
    public String emailImage;
    @SerializedName("email_text")
    @Expose
    public String emailText;
    @SerializedName("lat")
    @Expose
    public String lat;
    @SerializedName("log")
    @Expose
    public String log;
    @SerializedName("tax_rate")
    @Expose
    public String taxRate;
    @SerializedName("map_zones")
    @Expose
    public String mapZones;
    @SerializedName("hours")
    @Expose
    public String hours;
    @SerializedName("second_hours")
    @Expose
    public String secondHours;
    @SerializedName("more_hrs_radio")
    @Expose
    public String moreHrsRadio;
    @SerializedName("delivery_hrs_radio")
    @Expose
    public String deliveryHrsRadio;
    @SerializedName("delivery_hours")
    @Expose
    public String deliveryHours;
    @SerializedName("rdate")
    @Expose
    public String rdate;
    @SerializedName("vertices")
    @Expose
    public String vertices;
    @SerializedName("v_price")
    @Expose
    public String vPrice;
    @SerializedName("dely_type")
    @Expose
    public String delyType;
    @SerializedName("cuisine")
    @Expose
    public String cuisine;
    @SerializedName("partner")
    @Expose
    public String partner;
    @SerializedName("distance")
    @Expose
    public String distance;

    public String getId() {
        return id;
    }

    public String getRname() {
        return rname;
    }

    public String getEmailAddress() {
        return emailAddress;
    }

    public String getCity() {
        return city;
    }

    public String getAddress() {
        return address;
    }

    public String getOwner() {
        return owner;
    }

    public String getUser() {
        return user;
    }

    public String getPhone1() {
        return phone1;
    }

    public String getPhone2() {
        return phone2;
    }

    public String getRestImages() {
        return restImages;
    }

    public String getFax() {
        return fax;
    }

    public String getStatus() {
        return status;
    }
    public String getPayment() {
        return payment;
    }
    public String getAccPayment() {
        return accPayment;
    }
    public String getDeliveryType() {
        return deliveryType;
    }

    public String getPaymentProcess() {
        return paymentProcess;
    }

    public String getDeliveryTime() {
        return deliveryTime;
    }

    public String getDeliveryArea() {
        return deliveryArea;
    }

    public String getReceiveOrder() {
        return receiveOrder;
    }

    public String getNotify() {
        return notify;
    }

    public String getEmailRadio() {
        return emailRadio;
    }

    public String getEmailImage() {
        return emailImage;
    }

    public String getEmailText() {
        return emailText;
    }

    public String getLat() {
        return lat;
    }

    public String getLog() {
        return log;
    }

    public String getTaxRate() {
        return taxRate;
    }

    public String getMapZones() {
        return mapZones;
    }

    public String getHours() {
        return hours;
    }

    public String getSecondHours() {
        return secondHours;
    }

    public String getMoreHrsRadio() {
        return moreHrsRadio;
    }

    public String getDeliveryHrsRadio() {
        return deliveryHrsRadio;
    }

    public String getDeliveryHours() {
        return deliveryHours;
    }

    public String getRdate() {
        return rdate;
    }

    public String getVertices() {
        return vertices;
    }

    public String getvPrice() {
        return vPrice;
    }

    public String getDelyType() {
        return delyType;
    }

    public String getCuisine() {
        return cuisine;
    }

    public String getPartner() {
        return partner;
    }

    public String getDistance() {
        return distance;
    }
}

public String getStatus() {
    return status;
}

public String getMessage() {
    return message;
}

public List<Result> getResult() {
    return result;
}}

SearchDataRequest POJO 类:

public class SearchDataRequest
{
private double lat;
private double log;
private int miles;

public double getLat() {
    return lat;
}

public SearchDataRequest(double lat, double log, int miles) {
    this.lat = lat;
    this.log = log;
    this.miles = miles;
}

public void setLat(double lat) {
    this.lat = lat;
}

public double getLog() {
    return log;
}

public void setLog(double log) {
    this.log = log;
}

public int getMiles() {
    return miles;
}

public void setMiles(int miles) {
    this.miles = miles;
}}

MainActivity 调用:

private void getSearchDataFromAPI()
{
    Retrofit retrofit = new Retrofit.Builder()
            .baseUrl(SearchAPI.BASE_URL)
            .addConverterFactory(GsonConverterFactory.create()) //Here we are using the GsonConverterFactory to directly convert json data to object
            .build();


    SearchAPI api = retrofit.create(SearchAPI.class);
    SearchDataRequest searchDataRequest = new SearchDataRequest(48.8834553,2.3399433,6);

    api.getSearchData("application/x-www-form-urlencoded",searchDataRequest).enqueue(new Callback<SearchData>() {
        @Override
        public void onResponse(Call<SearchData> call, Response<SearchData> response) {
            Toast.makeText(MainActivity.this, "Success", Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onFailure(Call<SearchData> call, Throwable t) {
            Toast.makeText(MainActivity.this, "Fail", Toast.LENGTH_SHORT).show();
            System.out.println("Anshul : "+t.getMessage());
        }
    });
}

改造调用响应在此处发送失败响应。请在此处建议如何发送带有正文参数的 POST 请求。

【问题讨论】:

  • 您可以使用@Field 发送这些属性。这是否要求将数据作为单个对象发送?

标签: java android json rest retrofit


【解决方案1】:

您需要更改接口代码

public interface SearchAPI {
    String BASE_URL = "https://orderingspace.com/api";
    @FormUrlEncoded
    @POST("./search")
    Call<SearchData> getSearchData(@Field("lat") String lat,
                                   @Field("log") String log,
                                   @Field("miles") String miles);}

在主要活动中

SearchAPI api = retrofit.create(SearchAPI.class);
    api.getSearchData(lat,log,miles).enqueue(new Callback<SearchData>() {
        @Override
        public void onResponse(Call<SearchData> call, Response<SearchData> response) {
            Toast.makeText(MainActivity.this, "Success", Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onFailure(Call<SearchData> call, Throwable t) {
            Toast.makeText(MainActivity.this, "Fail", Toast.LENGTH_SHORT).show();
            System.out.println("Anshul : "+t.getMessage());
        }
    });

【讨论】:

    猜你喜欢
    • 2017-02-02
    • 2015-07-22
    • 2019-12-04
    • 1970-01-01
    • 2017-11-18
    • 1970-01-01
    • 2017-02-01
    • 2020-11-11
    • 2020-04-06
    相关资源
    最近更新 更多