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

发布时间 - 2026-01-11 02:55:53    点击率:

本文将介绍如何通过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'

源代码下载

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


# Retrofit提交Json  # Retrofit提交Json数据格式  # Android中Retrofit的简要介绍  # 基于Retrofit2+RxJava2实现Android App自动更新  # Android retrofit上传文件实例(包含头像)  # Android Retrofit 中文乱码问题的解决办法  # Android使用 Retrofit 2.X 上传多文件和多表单示例  # Android中Retrofit 2.0直接使用JSON进行数据交互  # Android Retrofit实现多图片/文件、图文上传功能  # Android Retrofit文件下载进度显示问题的解决方法  # Android Retrofit2网路编程实现方法详解  # 都是  # 就来  # 转化为  # 命名为  # 自动生成  # 大家多多  # 客户端  # 数据格式  # 源代码下载  # getName  # getSumDistance  # setName  # getSumPoints  # setSumPoints  # getSetupTime  # setSumDistance  # getRouteNo  # setRouteNo  # setDeviceId  # double 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: iOS UIView常见属性方法小结  Swift中swift中的switch 语句  Laravel如何使用withoutEvents方法临时禁用模型事件  音乐网站服务器如何优化API响应速度?  jimdo怎样用html5做选项卡_jimdo选项卡html5实现与切换效果【指南】  浅谈redis在项目中的应用  网站建设整体流程解析,建站其实很容易!  如何在服务器上三步完成建站并提升流量?  Laravel如何集成Inertia.js与Vue/React?(安装配置)  Windows10电脑怎么设置虚拟光驱_Win10右键装载ISO镜像文件  java ZXing生成二维码及条码实例分享  智能起名网站制作软件有哪些,制作logo的软件?  如何快速完成中国万网建站详细流程?  如何在宝塔面板中修改默认建站目录?  如何在新浪SAE免费搭建个人博客?  php后缀怎么变mp4格式错误_修改扩展名提示格式不对怎么办【技巧】  Laravel观察者模式如何使用_Laravel Model Observer配置  Microsoft Edge如何解决网页加载问题 Edge浏览器加载问题修复  米侠浏览器网页背景异常怎么办 米侠显示修复  Laravel怎么调用外部API_Laravel Http Client客户端使用  Laravel怎么配置自定义表前缀_Laravel数据库迁移与Eloquent表名映射【步骤】  韩国代理服务器如何选?解析IP设置技巧与跨境访问优化指南  Win11怎么更改系统语言为中文_Windows11安装语言包并设为显示语言  Laravel如何操作JSON类型的数据库字段?(Eloquent示例)  使用spring连接及操作mongodb3.0实例  如何做网站制作流程,*游戏网站怎么搭建?  Laravel怎么进行浏览器测试_Laravel Dusk自动化浏览器测试入门  昵图网官方站入口 昵图网素材图库官网入口  如何用免费手机建站系统零基础打造专业网站?  微博html5版本怎么弄发语音微博_语音录制入口及时长限制操作【教程】  BootStrap整体框架之基础布局组件  轻松掌握MySQL函数中的last_insert_id()  如何在IIS7上新建站点并设置安全权限?  Laravel怎么实现观察者模式Observer_Laravel模型事件监听与解耦开发【指南】  Laravel Sail是什么_基于Docker的Laravel本地开发环境Sail入门  Linux虚拟化技术教程_KVMQEMU虚拟机安装与调优  企业网站制作这些问题要关注  独立制作一个网站多少钱,建立网站需要花多少钱?  如何快速辨别茅台真假?关键步骤解析  php增删改查怎么学_零基础入门php数据库操作必知基础【教程】  Laravel如何发送邮件和通知_Laravel邮件与通知系统发送步骤  Android实现代码画虚线边框背景效果  香港网站服务器数量如何影响SEO优化效果?  HTML5空格在Angular项目里怎么处理_Angular中空格的渲染问题【详解】  想要更高端的建设网站,这些原则一定要坚持!  微信h5制作网站有哪些,免费微信H5页面制作工具?  ChatGPT回答中断怎么办 引导AI继续输出完整内容的方法  Java解压缩zip - 解压缩多个文件或文件夹实例  Android okhttputils现在进度显示实例代码  Android滚轮选择时间控件使用详解