Android如何通过Retrofit提交Json格式数据
2020年01月30日
作者:佚名
本文将介绍如何通过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","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<PointsBean> 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<PointsBean> getPoints() { return Points; } public void setPoints(List<PointsBean> 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<PointsBean> CREATOR=new Creator<PointsBean>() { @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<FlyRouteBean> 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<FlyRouteBean> call=postRoute.postFlyRoute(body); call.enqueue(new Callback<FlyRouteBean>() { @Override public void onResponse(Call<FlyRouteBean> call,Response<FlyRouteBean> response) { Log.e("sssss","-----------------------"+response.body().getDeviceId());//这里是用于测试,服务器返回的数据就是提交的数据。 } @Override public void onFailure(Call<FlyRouteBean> call,Throwable t) { Log.e("sssss",t.getMessage()); } });
<----------- 更新如何同时提交json数据和其他查询字段:--------------->
服务器端(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<ResponseBody> 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<ResponseBody> call=postRoute.postStudent(body,true); call.enqueue(new Callback<ResponseBody>() { @Override public void onResponse(Call<ResponseBody> call,Response<ResponseBody> response) { try { Log.i("onResponse",response.body().string()); } catch (IOException e) { e.printStackTrace(); } } @Override public void onFailure(Call<ResponseBody> call,Throwable t) { Log.e("onFailure",t.getMessage()); } }); Log.e("postjson",route);
结果:
微信公众号搜索 “ 程序精选 ” ,选择关注!
精选程序员所需精品干货内容!