这里有新鲜出炉的精品教程,程序狗速度看过来!
Android是一种基于Linux的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由Google公司和开放手机联盟领导及开发。尚未有统一中文名称,中国大陆地区较多人使用“安卓”或“安致”。
本篇文章主要介绍了Android如何通过Retrofit提交Json格式数据,具有一定的参考价值,有兴趣的可以了解一下
本文将介绍如何通过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<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);
结果:
具体代码已经传到github
PS:本文中服务器都是楼主在局域网搭建的,
需要添加的依赖:
compile 'com.squareup.retrofit2:retrofit:2.0.2'
compile 'com.squareup.retrofit2:converter-gson:2.0.0-beta3'
源代码下载
来源: http://www.phperz.com/article/17/0913/345731.html