Andriod网络处理

网络请求:okhttp使用

  • 第三方库okhttp的引入


    okhttp的引入
  • post请求

1.入参格式声明

public static final MediaType JSON = MediaType.parse("application/json; charset=utf-8");

2.请求实现

//url: 请求链接 , json:入参json字符串
String run(String url, String json) {
        //1.声明http请求管理类
        OkHttpClient client = new OkHttpClient();
        //2.声明入参
        RequestBody body = RequestBody.create(JSON, json);
        //3.声明请求
        Request request = new Request.Builder().url(url).post(body).build();
         try {
             //4.发送请求,接受响应
             Response response = client.newCall(request).execute();
             return  response.body().string();
         } catch (IOException e) {
             return e.toString();
         }
}
  • 注意点
    1.网络请求要放在异步线程处理
    2.要在AndirodMainifest中声明允许网络权限


    网络权限

异步处理:AnsyncTask使用

参考文档

    class MyAsyncTask extends AsyncTask<Integer,Integer, String>{
        @Override
        //重写doInBackground方法,在该方法中处理要处理的异步请求
        protected String doInBackground(Integer... integers) {
            return login(email,pwd);
        }
    }
  • 在子线程上进行数据请求,在UI线程上刷新UI
    // 0.定义接口
    public interface OnTaskLisnten{
        void onSuccess(Context context, String result);
        void onFailure(Context context, String msg);
    }

    //1.定义Task
    class MyAsyncTask extends AsyncTask<Integer,Integer, String>{
        private String result;
        private OnTaskLisnten lisnten;
        private Context context;

        public MyAsyncTask(Context context, OnTaskLisnten listen){
            this.lisnten = listen;
            this.context = context;
        }

        @Override
        protected String doInBackground(Integer... integers) {
            result = login(email,pwd);
            return  result;
        }

        @Override
        protected void onPostExecute(String s) {
            super.onPostExecute(s);
            if (s.length() > 0){
                this.lisnten.onSuccess(context,s);
            }else {
                this.lisnten.onFailure(context, "请求失败,请稍后再试");
            }
        }
    }

  // 2.使用异步请求类
         email = emailText.getText().toString();
        pwd = pwdText.getText().toString();
        MyAsyncTask task = new MyAsyncTask(this, new OnTaskLisnten() {
            @Override
            public void onSuccess(Context context, String result) {    
            }
            @Override
            public void onFailure(Context context, String msg) {
            }
      });

入参序列化

将object对象转换为JSONObject,调用JSONObject的toString方法可以获取到json字符串

Map<String,String > param = new HashMap<String, String>();
param.put("email", email);
param.put("passwd", pwd);
JSONObject jsonParam = new JSONObject(param);
Log.e("test",jsonParam.toString());
String result = run("http://120.79.19.171:3021/Login/loginChecked", jsonParam.toString());

出参序列化(不包含嵌套(可以用递归处理))

方案1:出参json字符串 --》 JSONObject --> Map<String, Object>

        // 声明一个存储map
        Map<String, Object> responseDic = new HashMap<String , Object>();
        try {
            //  json字符串 --》JSONObject
            JSONObject object = new JSONObject(result);
           //  获取所有keys
            Iterator<String> keysIter = object.keys();
           // 遍历所有key,根据key取出相应的value值,然后存入map中
            while (keysIter.hasNext()){
                String key = keysIter.next();
                Object value = object.get(key);
                responseDic.put(key,value);
            }
            Log.e("test-1",responseDic.toString());
        }catch (Exception e){
            Log.e("test", "解析失败");
        }

方案二: fastjson

String text = JSON.toJSONString(obj); //序列化
VO vo = JSON.parseObject("{...}", VO.class); //反序列化
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,680评论 19 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 179,291评论 25 708
  • 听着几位部长关于服务学员的分享,多了很多的行动的动力,透过粟莎部长、范韬部长的分享,让我真切的感知到一份耕耘一份收...
    每天進步一點點阅读 572评论 0 1
  • 我梦见了死亡 我说死不可怕因为几十年后我们都会死 死亡就是深睡中不再醒来 没有活着的痛苦没有喜悦 这叫不叫视死如归...
    田萍阅读 436评论 0 2
  • 半个月的回乡之旅在登上南下的火车时画上句号! 在车上,家乡好友微信祝一路顺风,兰州来的同学在苏州母校怀旧,...
    姑苏拈花微笑阅读 603评论 0 2

友情链接更多精彩内容