android studio 接口方法,Android Studio第三十期 - 介绍几种网络请求方式写法

框架git地址:附(爱一个人就要爱他(loader)的全部~)

请求方式:POST

请求示例{

"verify_info":{

"app":{

"app_id":"2e263d60-2d48-43d9-b699-6f3bdb38eff8",

"version":"1.0.0",

"api_version":160815,

"user_id":"201605131806550245"

},

"device":{

"platform":"XiaoMi Note2",

"model":"Android 4.4.2",

"factory":"XiaoMi",

"screen_size":"1920*1080",

"denstiy":2,

"imei":"352105068965016/01",

"mac":"50-8D-4F-4S-55-5D",

"gprs":"4G",

"latitude":39.972907,

"longitude":116.503154

},

"token_check":{

"access_token":"3420d0e0-ed77-45e1-8370-2b55af0a62e8",

"timestamp":"1453116822556",

"sign":"fac5ff3fce1c5890a6bae11e7670dc1f",

"client_id":"356877020056553-08002700DC94",

"sequence_id":"08002700DC94-15110519074300001",

"language":"zh-cn",

"timezone":"8"

}    },

"data":{

}}

公共响应参数:参数名类型说明示例okboolean网络请求返回状态true

codeint网络请求状态码200

messagestring网络请求状态信息ok

- dataobject返回数据内容,json数据jsonObject

响应参数示例{

"ok":true,

"code":200,

"message":"成功",

"data":{

"qlty":"良",

"txt":"多云",

"tmp":32

}

}

写法:

接口部分:ConstantNetUtil.URL_THIRD="http://192.168.200.96/"public interface DemoApi{

/**

* 单曲列表

* @param json

* @return

*/

@JSON(ConstantNetUtil.URL_THIRD+"v2/weather/weather.get.info")

Call getNetsCollectList(String json);

}

请求部分:private void doNewWork(String user_id) {

Net.getInstance().get().cancel(getClass().getName() + "MainActivityTAG");

MaterialProgressLoadingUtil.showProgressDialog(this, "加载中....");

DemoParams p = new DemoParams(user_id);

Net.build(DemoApi.class,

getClass().getName() + "MainActivityTAG").getDemoModel(ParamsUtils.just(null)).enqueue(new Callback() {

@Override

public void onResponse(Result result) {

if (result.isOK()) {

DemoWeatherModel dwm = result.getResult();

if (dwm != null) {

tv_context1.setText(dwm.getQlty() + "," + dwm.getTxt() + "," + dwm.getTmp());

}

//                    demoModel = new DemoModel();

//                    demoModel_item = new DemoModel_item();

//                    demoModel_list = new ArrayList();

//                    demoModel_item = result.getResult().getPage_info();

//                    demoModel_list = result.getResult().getFood_list();

//                    if (demoModel_list != null && demoModel_list.size() > 0) {

//                        //有数据状态

//                        //处理自己的逻辑 你要是不会 神都救不了你了~

//                        ToastUtil.showToastCenter("有数据");

//                    } else {

//                        //无数据状态

//                        //可以使用自定义布局 参考:http://liangxiao.blog.51cto.com/3626612/1851105

//                        ToastUtil.showToastCenter("无数据");

//                    }

} else {

//无网状态

//                    ToastUtil.showToastCenter("无网状态 请重新请求服务器!");

}

//                MaterialProgressLoadingUtil.dismissProgressDialog();

}

});

}

2.POST请求格式:网易云音乐对第三方提供的接口(Android平台)是经过加密安全处理的,遵守以下规则:1. 每个产品有对应的 $(productname)2. 需要引用附件中的libpoison.so3. 引用该so的Android软件的签名md5事先提供给云音乐。非该签名的软件将无法正常使用该so。(签名md5获取方法:eclipse->设置->Preferences->Android->Build->MD5 fingerprint)4. 所有接口都是用固定url:

测试环境http://api.igame.163.com/openapi/$(productname) 线上环境http://api.music.163.com/openapi/$(productname)

utf-8编码。具体请求信息放在“参数params”(参数名为params)中。

5. 接口使用请参考“第三方接口说明”,并调用so中函数来构造“参数params”的值6. 接口“歌曲的url”使用http Get,其他接口使用http Post。7. 接口“歌曲的url”每天每个设备320kbits的获取次数上限为1000次,请做好到达上限提示。建议只有在下载开始前才调用该接口。

代码调用示例:

package com.netease.cloudmusic.utils;

import android.content.Context;

import com.netease.cloudmusic.NeteaseMusicApplication;

public class NeteaseMusicUtils {static {System.loadLibrary("poison");nativeInit(NeteaseMusicApplication.getInstance());//这里改成自己的context//example//String params = getUrlParameters("/search","{\"keyword\":\"周杰伦\",\"limit\":10,\"offset\":0}\")//httpPost.post("http://music.163.com/openapi/vivo", new pair("params", params))}

/*** 初始化,必须* @param context*/public native static void nativeInit(Context context);/*** 获取请求中"params"的值* 例:如果调用搜索接口,搜索keyword=周杰伦 limit=10 offset=0* params=getUrlParameters("/search","{\"keyword\":\"周杰伦\",\"limit\":10,\"offset\":0}\")* @param requestUri 接口说明中的uri* @param paramJson 接口说明中的参数json表达,如果为空请传"{}"* @return*/public native static String getUrlParameters(String requestUri, String paramJson);}

歌单分类

Uri: /playlist/tags参数:无返回:字段类型描述

dataList标签列表

codeInteger200 正常 500 异常获取分类歌单列表

Uri: /playlist/oftag参数:字段类型描述

nameString标签名称

orderStringhot or new

limitInteger返回数据量

offsetInteger偏移

返回:

字段类型描述

dataList歌单列表

codeInteger200 正常 500 异常

hasMoreboolean是否还有更多

歌曲的Url

Uri: /url参数:字段类型描述

songIdString歌曲Id

bitrateInteger比特率(只支持320/160/96三个数值,对应320/160/96kbps)

返回:正确调用会302跳转至歌曲对应的url,可直接播放或下载。songId不存在将返回httpcode:400如果调用到达上限(每天每个设备320kbits的获取次数上限为1000次),将返回httpcode:401

歌曲的Url

Uri: /song/playurl参数:字段类型描述

songIdString歌曲Id

bitrateInteger比特率(只支持320/160/96三个数值,对应320/160/96kbps)

返回:字段类型描述

dataUrlInfoData播放音频信息

codeInteger200 正常 500 异常

写法:

接口部分:public interface NeteaseMusicApi {

//测试

@POST(ConstantNetUtil.NETEASE_MUSIC)

Call neatease(@Arg("params") String params);

/**

* nets index list

* @param params

* @return

*/

@POST(ConstantNetUtil.NETEASE_MUSIC)

Call getNetsClassifyList(@Arg("params") String params);

}

请求部分:public void getNetsClassifyList(String name, String order, int limit, int offset) {

String a = "{\"name\":\"" + name + "\",\"order\":\"" + order + "\",\"limit\":" + limit + ",\"offset\":" + offset + "}";

String b = "{\"b1\":\"" + name + "\",\"b2\":\"" + order + "\",\"b3\":\"" + limit + ", \"b4\":\"" + offset + "}";

String c = "{}";

String d = "{\"songid\":"+name+"}";

String p = NeteaseMusicUtils.getUrlParameters("/playlist/oftag", a);

NeteaseNet.build(NeteaseMusicApi.class, getClass().getName()).getNetsClassifyList(p).enqueue(new Callback() {

@Override

public void onResponse(Result result) {

if (!hasView()) {

return;

}

if (!result.isOK()) {

getView().onNetsClassifyFailure();

return;

}

if (result.getResult().getCode() == HttpURLConnection.HTTP_OK) {

if (result.getResult() != null) {

getView().onNetsClassifySuccess(result.getResult().getData(), result.getResult().isHasMore());

} else {

getView().onNetsClassifyFailure();

}

} else {

getView().onNetsClassifyFailure();

}

}

});

}

附:转义字符写法要注意:String a = "{\"name\":\"" + name + "\",\"order\":\"" + order + "\",\"limit\":" + limit + ",\"offset\":" + offset + "}";

String b = "{\"b1\":\"" + name + "\",\"b2\":\"" + order + "\",\"b3\":\"" + limit + ", \"b4\":\"" + offset + "}";

String c = "{}";

String d = "{\"songid\":"+name+"}";

String params = "{\"type\":\"" + type + "\",\"key\":\"" + key + "\"}";

3.未加密的键值对请求方式:(这里使用聚合数据demo)

527b43e0f82417a5fc7b60eff25a9b89.png{

"reason": "成功的返回",

"result": {

"stat": "1",

"data": [

{

"uniquekey": "3d2c710e656006674ca3db585d1aa30b",

"title": "痛惜!山东临沂一小女孩命丧滑雪场",

"date": "2017-02-09 15:31",

"category": "头条",

"author_name": "齐鲁壹点",

"url": "http://mini.eastday.com/mobile/170209153114657.html",

"thumbnail_pic_s": "http://07.imgmini.eastday.com/mobile/20170209/20170209153114_7d1b97e6f4a356210dbb0708f53f813e_1_mwpm_03200403.jpeg",

"thumbnail_pic_s02": "http://07.imgmini.eastday.com/mobile/20170209/20170209153114_7d1b97e6f4a356210dbb0708f53f813e_2_mwpm_03200403.jpeg",

"thumbnail_pic_s03": "http://07.imgmini.eastday.com/mobile/20170209/20170209153114_7d1b97e6f4a356210dbb0708f53f813e_3_mwpm_03200403.jpeg"

},

{

"uniquekey": "b77f92aecb69a3804c35b4146fe8eef5",

"title": "宝钢股份董事长陈德荣辞职 武钢2月14日终止上市",

"date": "2017-02-09 13:34",

"category": "头条",

"author_name": "澎湃新闻网",

"url": "http://mini.eastday.com/mobile/170209133442780.html",

"thumbnail_pic_s": "http://01.imgmini.eastday.com/mobile/20170209/20170209133442_d2ad04dc6237b87b71e182c0dda657db_1_mwpm_03200403.jpeg"

}

]

},

"error_code": 0

}

写法:

接口部分:public interface JuheApi {

@POST(SERVER_JUHE+"toutiao/index")

Call getList(@Arg("type") String type, @Arg("key") String key);

}

请求部分:/**

* 直接根据地质拼接键值对解析的请求方式

* @param type

* @param key

*/

private void doNetWork_juhe(String type, String key) {

JuheNet.getsInstance().get().cancel(getClass().getName() + "MainActivityTAG_JUHE");

JuheNet.build(JuheApi.class,getClass().getName() + "MainActivityTAG_JUHE").getList(type, key).enqueue(new Callback() {

@Override

public void onResponse(Result result) {

if (!result.isOK()){

return;

}

DemoJuheModel djm = result.getResult();

if (djm!=null){

tv_context1.setText(djm.getResult().getStat());

}

}

});

}

未完待续~下班~下班~吃饭~减肥~

5468f9466eb2b8b8a0c10078d3ba8e0d.gif

~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值