博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android Studio第三十期 - 介绍几种网络请求方式写法
阅读量:6952 次
发布时间:2019-06-27

本文共 9820 字,大约阅读时间需要 32 分钟。

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

    

    1:

    请求方式: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":{
    }}

公共响应参数:

参数名 类型 说明 示例
ok boolean 网络请求返回状态 true
code int 网络请求状态码 200
message string 网络请求状态信息 ok
- data object 返回数据内容,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.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
参数:
无 返回:

字段 类型 描述
data List<PlaylistTag> 标签列表
code Integer 200 正常 
500 异常

  • 获取分类歌单列表

Uri: /playlist/oftag
参数:

字段 类型 描述
name String 标签名称
order String hot or new
limit Integer 返回数据量
offset Integer 偏移

返回:

字段 类型 描述
data List<Playlist> 歌单列表
code Integer 200 正常 
500 异常
hasMore boolean 是否还有更多


  • 歌曲的Url

Uri: /url
参数:

字段 类型 描述
songId String 歌曲Id
bitrate Integer 比特率(只支持320/160/96三个数值,对应320/160/96kbps)

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


  • 歌曲的Url

Uri: /song/playurl
参数:

字段 类型 描述
songId String 歌曲Id
bitrate Integer 比特率(只支持320/160/96三个数值,对应320/160/96kbps)

返回:

字段 类型 描述
data UrlInfoData 播放音频信息
code Integer 200 正常 
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)

    

{    "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());                }            }        });    }

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

    

    ~

转载地址:http://tykil.baihongyu.com/

你可能感兴趣的文章
递归,尾递归,回溯
查看>>
POJ-1488(字符串应用)
查看>>
浅探SpringMVC中HandlerExecutionChain之handler、interceptor
查看>>
读大话设计模式有感
查看>>
获取当前WEB应用全路径
查看>>
网络编程的演进——从Apache到Nginx
查看>>
mui 中template 的使用
查看>>
2018.11.04-3988-地理课(geography)
查看>>
linux命令总结
查看>>
[激励机制]浅谈内部竞争——如何让你的员工玩命干活?
查看>>
把一个控制器的view添加到另外一个控制器
查看>>
pc端和移动端下拉刷新
查看>>
Maven详解之聚合与继承
查看>>
Spark(二)CentOS7.5之Spark2.3.1HA安装
查看>>
内存池和tcmalloc的性能比较
查看>>
大白话5分钟带你走进人工智能-第二十三节决策树系列之特点和数学表达形式(2)...
查看>>
GOF设计模式汇总
查看>>
Ehcache整合spring配置,配置springMVC缓存
查看>>
华为敏捷/DevOps实践:如何开好站立会议
查看>>
NDN与TCP/IP
查看>>