android json传输数据到服务器,Android中post请求传递json数据给服务端的实例

在最近的项目中有个需求是这样的:

入参封装成JSON,EXAMPLE:

{ "uuid": "iamauuid",

"clientType": "AND",

"content": "{\"gender\":\"F\",\"name\":\"TTT\"}"}

其中content中是json的object,且要求把content中特殊的字符进行转义。

主要代码如下:

/**

* post请求用json的格式传递数据给服务器

*

* @param callback

*/

public static void postShareContent(Context context, T saveObject, final ShareSaveDataCallback callback) {

final String uuid = StringUtils.generateUUID().replaceAll("-", "");

//利用Gson来处json数据和类模型之间的转化

Gson gson = new Gson();

//把类模型对象转化成json的数据模式

String contentJson = gson.toJson(saveObject);

//用ShareEntity把内容给封装起来,再处理成json的格式

ShareEntity shareEntity = new ShareEntity();

//uuid本地端生成,有特殊的方法,下面会注解

shareEntity.uuid = uuid;

shareEntity.clientType = "AND";

shareEntity.content = contentJson;

//再用gson.toJson()处理会自动把第二层的object对象的特殊字符转义掉

String shareJson = gson.toJson(shareEntity);

StringEntity entity = null;

try {

//把要传给后端的json数据,用StringEntity给封装起来

entity = new StringEntity(shareJson,"UTF-8");

//注明:UTF-8是防止传给后端时中文出现乱码

} catch (UnsupportedEncodingException e) {

e.printStackTrace();

}

HttpApiClient.postJsonByAccessToken(context, ApiBaseUrl.getShareUrl(), entity, true, new ApiResponseHandler() {

@Override

public void onResponse(boolean success, JsonObject jsonObject, ErrorCode errCode) {

super.onResponse(success, jsonObject, errCode);

callback.onSaveResult(success, uuid, errCode);

}

});

}

postJsonByAccessToken的方法:

private static AsyncHttpClient mHttpClient = new AsyncHttpClient();

public static void postJsonByAccessToken(Context context, String url, StringEntity entity, boolean isCompleterUrl, AsyncHttpResponseHandler handler) {

synchronized (mHttpClient) {

addHeader(HEADER_TOKEN, token);

if (!isCompleterUrl) {

url = getCompleteUrl(url);

}

mHttpClient.post(context, url, entity, ApiParam.CONTENT_TYPE_JSON, handler);

}

}

contentType的类型为:application/json

/**

public interface ApiParam {

/**

* json格式

*/

String CONTENT_TYPE_JSON = "application/json";

}

其中生产本地的uuid方法如下:相当于会自动生产一组随机数

public static String generateUUID() {

return UUID.randomUUID().toString();

}

数据代码的一部分:

{"clientType":"AND",

"uuid":"e3ab0260286d442da86da7fac21e1cc7"

"content":"{\"matchEventStats\":{\"extraTime\":0,\"timeLineModels\":[{\"downPlayerId\":0,\"id\":2188,\"playerHeadUrl\":\"http://7xj3pr.com1.z0.glb.clouddn.com/registration/user/head/image/rdGsidKZHjPzun6TMrTDyMz7IngTONlQ\",\"playerId\":1147,\"playerName\":\"张宇斌\",\"schoolId\":6,\"timeLineEventType\":\"GOAL\",\"timeMin\":0,\"timeSec\":0,\"upPlayerId\":0},{\"downPlayerHeadUrl\":\"http://7xj3pr.com1.z0.glb.clouddn.com/default/head/useravatar.png\",\"downPlayerId\":1682,\"downPlayerName\":\"林修乾\",\"id\":1209,\"playerId\":0,\"schoolId\":116,\"timeLineEventType\":\"SU\",\"timeMin\":4,\"timeSec\":3,\"upPlayerHeadUrl\":......}

由于数据量比较大,固就显示一部分的数据来说明问题。

基本就是这样,快去解决你们的问题吧!

以上这篇Android中post请求传递json数据给服务端的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Delphi XE10提供了NetHTTPClient用于进行HTTP请求,并且可以通过POST方法发送JSON数据。具体操作步骤如下: 1. 首先,在项目添加REST.Json单元,用于JSON解析和生成。 2. 创建TJSONObject对象,并使用TJSONPair对象向其添加键值对。 3. 通过TJSONObject对象的ToString方法将JSON对象转换成字符串。 4. 创建TStringStream对象,并将步骤3生成的JSON字符串写入到TStringStream。 5. 创建NetHTTPClient对象,并设置请求的ContentType属性为application/json。 6. 通过Post方法发送HTTP请求,并将步骤4的TStringStream作为参数传递。 以下是实现上述步骤的示例代码: var json: TJSONObject; pair: TJSONPair; stream: TStringStream; httpClient: TNetHTTPClient; response: IHTTPResponse; begin json := TJSONObject.Create; try pair := TJSONPair.Create('name', 'John'); json.AddPair(pair); pair := TJSONPair.Create('age', 30); json.AddPair(pair); stream := TStringStream.Create(json.ToString); try httpClient := TNetHTTPClient.Create(nil); try httpClient.ContentType := 'application/json'; response := httpClient.Post('http://example.com/api', stream); ShowMessage(response.ContentAsString); finally httpClient.Free; end; finally stream.Free; end; finally json.Free; end; end; 其请求的URL地址为http://example.com/api,JSON对象包含了两个键值对,分别为name和age。通过调用httpClient.Post方法将JSON数据发送到指定的URL地址,并且接收返回的HTTP响应结果。 ### 回答2: Delphi XE10提供的TNetHTTPClient组件能够进行HTTP请求的发送和接收,包括POST请求JSON数据传输。 使用TNetHTTPClient发送POST请求需要设置请求方法和请求头,并将请求数据写入请求。例如,以JSON格式发送POST请求: var HttpClient: TNetHTTPClient; Response: IHTTPResponse; JsonToSend: TJSONObject; RequestContent: TStringStream; begin HttpClient := TNetHTTPClient.Create(nil); try JsonToSend := TJSONObject.Create; JsonToSend.AddPair('name', 'John'); JsonToSend.AddPair('age', '25'); RequestContent := TStringStream.Create(JsonToSend.ToString, TEncoding.UTF8); try HttpClient.ContentType := 'application/json'; Response := HttpClient.Post('http://example.com/myservice', RequestContent); // 处理响应 finally RequestContent.Free; end; finally HttpClient.Free; end; end; 在这个例子,首先创建了一个TNetHTTPClient对象。然后构建了要发送的JSON数据,以TJSONObject形式存储。接着创建一个TStringStream对象,以UTF-8编码写入JSON数据作为请求体。通过设置ContentType为application/json,告诉服务请求数据类型是JSON格式。最后调用Post方法发送请求,并处理响应。 总之,使用Delphi XE10提供的TNetHTTPClient组件进行POST请求发送和JSON数据传输是非常方便和易于实现的。 ### 回答3: Delphi XE10提供了NetHTTPClient组件,可以通过该组件发起HTTP请求,包括POST请求并发送JSON数据。实现步骤如下: 1. 在工具栏找到NetHTTPClient组件并拖拽到窗体上。 2. 在代码实例化NetHTTPClient组件,并设置请求的URL和请求方法为'POST'。 3. 创建TJSONObject对象,将需要发送的数据加入该JSON对象。 4. 设置NetHTTPClient的ContentType为'application/json',并将JSON对象转换为字符串后,设置RequestContent属性。 5. 调用NetHTTPClient的Execute方法发起请求请求结果保存在response字符串。 6. 最后,释放NetHTTPClient对象和JSON对象。 示例代码如下: var httpClient: TNetHTTPClient; data: TJSONObject; response: string; begin httpClient := TNetHTTPClient.Create(nil); try httpClient.ContentType := 'application/json'; httpClient.Accept := 'application/json'; data := TJSONObject.Create; try data.AddPair('name', 'John'); data.AddPair('age', 25); httpClient.Request.Content := StringOf(data); response := httpClient.Post('http://example.com/', nil); // 处理服务返回结果(response) finally data.Free; end; finally httpClient.Free; end; end; 以上就是使用Delphi XE10的NetHTTPClient组件发起POST请求并发送JSON数据的步骤。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值