retrofit2 发送json数据_Android如何通过Retrofit提交Json格式数据

本文介绍了如何在Android中使用Retrofit2库向服务器发送Json格式的数据。通过创建Bean类,使用Gson转换,以及定义接口,实现了将数据转化为Json并进行POST请求。
摘要由CSDN通过智能技术生成

本文将介绍如何通过retrofit库post一串json格式的数据。首先post的json数据格式如下:

{

"Id": "string",

"DeviceId": "string",

"Name": "string",

"SumDistance": 0,

"RouteNo": "string",

"SumPoints": 0,

"SetupTime": "2016-06-10T13:11:00.766Z",

"UsedTime": 0,

"Points": [

{

"Id": "string",

"RouteNo": "string",

"Name": "string",

"Longitude": "string",

"Latitude": "string",

"Height": 0,

"Distance": 0,

"Yaw": 0,

"Pitch": 0,

"Speed": 0,

"Usedtime": 0

}

]

}

通过安装Android studio gsonformat插件,根据上面的json格式自动生成一个Bean类,本文命名为FlyRouteBean,

package com.example.administrator.retrofitex;

import java.util.List;

import android.os.Parcel;

import android.os.Parcelable;

/**

* Created by Administrator on 2016/6/10.

*/

public class FlyRouteBean{

/**

* Id : string

* DeviceId : string

* Name : string

* SumDistance : 0

* RouteNo : string

* SumPoints : 0

* SetupTime : 2016-05-23T06:20:50.254Z

* UsedTime : 0

* Points : [{"Id":"string","RouteNo":"string","Name":"string","Longitude":"string","Latitude":"string","Height":0,"Distance":0,"Yaw":0,"Pitch":0,"Speed":0,"Usedtime":0}]

*/

public String Id;

public String DeviceId;

public String Name;

public double SumDistance;

public String RouteNo;

public int SumPoints;

public String SetupTime;

public double UsedTime;

/**

* Id : string

* RouteNo : string

* Name : string

* Longitude : string

* Latitude : string

* Height : 0

* Distance : 0

* Yaw : 0

* Pitch : 0

* Speed : 0

* Usedtime : 0

*/

public List Points;

public String getId() {

return Id;

}

public void setId(String Id) {

this.Id = Id;

}

public String getDeviceId() {

return DeviceId;

}

public void setDeviceId(String DeviceId) {

this.DeviceId = DeviceId;

}

public String getName() {

return Name;

}

public void setName(String Name) {

this.Name = Name;

}

public double getSumDistance() {

return SumDistance;

}

public void setSumDistance(double SumDistance) {

this.SumDistance = SumDistance;

}

public String getRouteNo() {

return RouteNo;

}

public void setRouteNo(String RouteNo) {

this.RouteNo = RouteNo;

}

public int getSumPoints() {

return SumPoints;

}

public void setSumPoints(int SumPoints) {

this.SumPoints = SumPoints;

}

public String getSetupTime() {

return SetupTime;

}

public void setSetupTime(String SetupTime) {

this.SetupTime = SetupTime;

}

public double getUsedTime() {

return UsedTime;

}

public void setUsedTime(double UsedTime) {

this.UsedTime = UsedTime;

}

public List getPoints() {

return Points;

}

public void setPoints(List Points) {

this.Points = Points;

}

public static class PointsBean implements Parcelable {

public String Id;

public String RouteNo;

public String Name;

public String Longitude;

public String Latitude;

public double Height;

public double Distance;

public double Yaw;

public double Pitch;

public double Speed;

public double Usedtime;

public String getId() {

return Id;

}

public void setId(String Id) {

this.Id = Id;

}

public String getRouteNo() {

return RouteNo;

}

public void setRouteNo(String RouteNo) {

this.RouteNo = RouteNo;

}

public String getName() {

return Name;

}

public void setName(String Name) {

this.Name = Name;

}

public String getLongitude() {

return Longitude;

}

public void setLongitude(String Longitude) {

this.Longitude = Longitude;

}

public String getLatitude() {

return Latitude;

}

public void setLatitude(String Latitude) {

this.Latitude = Latitude;

}

public double getHeight() {

return Height;

}

public void setHeight(double Height) {

this.Height = Height;

}

public double getDistance() {

return Distance;

}

public void setDistance(double Distance) {

this.Distance = Distance;

}

public double getYaw() {

return Yaw;

}

public void setYaw(double Yaw) {

this.Yaw = Yaw;

}

public double getPitch() {

return Pitch;

}

public void setPitch(double Pitch) {

this.Pitch = Pitch;

}

public double getSpeed() {

return Speed;

}

public void setSpeed(double Speed) {

this.Speed = Speed;

}

public double getUsedtime() {

return Usedtime;

}

public void setUsedtime(double Usedtime) {

this.Usedtime = Usedtime;

}

@Override

public String toString() {

return "PointsBean{" +

"Id='" + Id + '\'' +

", RouteNo='" + RouteNo + '\'' +

", Name='" + Name + '\'' +

", Longitude='" + Longitude + '\'' +

", Latitude='" + Latitude + '\'' +

", Height=" + Height +

", Distance=" + Distance +

", Yaw=" + Yaw +

", Pitch=" + Pitch +

", Speed=" + Speed +

", Usedtime=" + Usedtime +

'}';

}

@Override

public void writeToParcel(Parcel dest, int flags) {

// TODO Auto-generated method stub

dest.writeString(Id);

dest.writeString(RouteNo);

dest.writeString(Name);

dest.writeString(Longitude);

dest.writeString(Latitude);

dest.writeDouble(Height);

dest.writeDouble(Distance);

dest.writeDouble(Yaw);

dest.writeDouble(Pitch);

dest.writeDouble(Speed);

dest.writeDouble(Usedtime);

}

public static final Creator CREATOR=new Creator() {

@Override

public PointsBean createFromParcel(Parcel source) {

// TODO Auto-generated method stub

PointsBean pointsBean=new PointsBean();

pointsBean.setId(source.readString());

pointsBean.setRouteNo(source.readString());

pointsBean.setName(source.readString());

pointsBean.setLongitude(source.readString());

pointsBean.setLatitude(source.readString());

pointsBean.setHeight(source.readInt());

pointsBean.setDistance(source.readInt());

pointsBean.setYaw(source.readInt());

pointsBean.setPitch(source.readInt());

pointsBean.setSpeed(source.readInt());

pointsBean.setUsedtime(source.readInt());

return pointsBean;

}

@Override

public PointsBean[] newArray(int size) {

// TODO Auto-generated method stub

return new PointsBean[size];

}

};

@Override

public int describeContents() {

// TODO Auto-generated method stub

return 0;

}

}

@Override

public String toString() {

return "FlyRouteBean{" +

"Id='" + Id + '\'' +

", DeviceId='" + DeviceId + '\'' +

", Name='" + Name + '\'' +

", SumDistance=" + SumDistance +

", RouteNo='" + RouteNo + '\'' +

", SumPoints=" + SumPoints +

", SetupTime='" + SetupTime + '\'' +

", UsedTime=" + UsedTime +

", Points=" + Points +

'}';

}

}

然后就来建立接口了,其内容如下:

public interface PostRoute {

@Headers({"Content-Type: application/json","Accept: application/json"})//需要添加头

@POST("api/FlyRoute/Add")

Call postFlyRoute(@Body RequestBody route);//传入的参数为RequestBody

}

接下来就是提交数据的了:

FlyRouteBean flyRouteBean=new FlyRouteBean();

flyRouteBean=initdata(flyRouteBean);//根据Bean类初始化一个需要提交的数据类

Gson gson=new Gson();

String route= gson.toJson(flyRouteBean);//通过Gson将Bean转化为Json字符串形式

Retrofit retrofit=new Retrofit.Builder()

.baseUrl(URL)

.addConverterFactory( GsonConverterFactory.create())

.build();

PostRoute postRoute=retrofit.create(PostRoute.class);

RequestBody body=RequestBody.create(okhttp3.MediaType.parse("application/json; charset=utf-8"),route);

Call call=postRoute.postFlyRoute(body);

call.enqueue(new Callback() {

@Override

public void onResponse(Call call, Response response) {

Log.e("sssss","-----------------------"+response.body().getDeviceId());//这里是用于测试,服务器返回的数据就是提交的数据。

}

@Override

public void onFailure(Call call, Throwable t) {

Log.e("sssss",t.getMessage());

}

});

服务器端(ASP):核心代码如下,接收一个json格式学生类,加一个bool类型

[HttpPost]

public IHttpActionResult Info(Student stu, bool IsGay)

{

return Ok(stu.Name);

}

客户端:

//接口地址:http://172.20.69.209:9665/api/Test/Info?IsGay={IsGay}

@POST("api/Test/Info")

Call postStudent(@Body RequestBody stu,@Query("IsGay") boolean IsGay);

实现代码:

Student stu=new Student();

stu.setId("20103177");

stu.setName("zpm");

stu.setAge(18);

Gson gson=new Gson();

String route= gson.toJson(stu);

Log.e("post", "//");

Retrofit retrofit=new Retrofit.Builder()

.baseUrl("http://172.20.69.209:9665/")

.addConverterFactory( GsonConverterFactory.create())

.build();

PostRoute postRoute=retrofit.create(PostRoute.class);

RequestBody body=RequestBody.create(okhttp3.MediaType.parse("application/json; charset=utf-8"),route);

Call call=postRoute.postStudent(body,true);

call.enqueue(new Callback() {

@Override

public void onResponse(Call call, Response response) {

try {

Log.i("onResponse", response.body().string());

} catch (IOException e) {

e.printStackTrace();

}

}

@Override

public void onFailure(Call call, Throwable t) {

Log.e("onFailure", t.getMessage());

}

});

Log.e("postjson", route);

结果:

具体代码已经传到github

PS:本文中服务器都是楼主在局域网搭建的,

需要添加的依赖:

compile 'com.squareup.retrofit2:retrofit:2.0.2'

compile 'com.squareup.retrofit2:converter-gson:2.0.0-beta3'

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值