您的位置:首页 > 理论基础 > 计算机网络

Android Studio第三十期 - 介绍几种网络请求方式写法

2017-02-10 16:45 405 查看
框架git地址:附(爱一个人就要爱他(loader)的全部~)

https://github.com/geeklx/MakeJarAAR

1:http://192.168.200.96/v2/weather/weather.get.info
请求方式: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<NetsMySongCollectBean> 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<DemoWeatherModel>() {
@Override
public void onResponse(Result<DemoWeatherModel> 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_list>();
//                    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.so

3. 引用该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<PlaylistTag>标签列表
codeInteger200 正常
500 异常
获取分类歌单列表

Uri: /playlist/oftag
参数:

字段类型描述
nameString标签名称
orderStringhot or new
limitInteger返回数据量
offsetInteger偏移
返回:

字段类型描述
dataList<Playlist>歌单列表
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<String> neatease(@Arg("params") String params);

/**
* nets index list
* @param params
* @return
*/
@POST(ConstantNetUtil.NETEASE_MUSIC)
Call<NetsListResult> 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<NetsListResult>() {
@Override
public void onResponse(Result<NetsListResult> 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)



{
"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<DemoJuheModel> 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<DemoJuheModel>() {
@Override
public void onResponse(Result<DemoJuheModel> result) {
if (!result.isOK()){
return;
}
DemoJuheModel djm = result.getResult();
if (djm!=null){
tv_context1.setText(djm.getResult().getStat());
}
}
});
}
未完待续~下班~下班~吃饭~减肥~




~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  框架 网络请求