Android如何通过Retrofit提交Json格式数据

时间:2022-07-27
本文章向大家介绍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’

源代码下载

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