zoukankan      html  css  js  c++  java
  • Dhroid框架笔记(DhNet、Adapter)

    3.1.1 DhNet用于获取网络中的数据

    DhNet net=new DhNet("路劲");
    net.addParam("key", "参数").addParam("key2", "参数2");
    net.doGet(new NetTask(this) {
    @Override
    public void doInUI(Response response, Integer transfer) { //处理返回结果 }}); //get方式 net.doGet(new NetTask(this){xxx});
    //post方式 net.doPost(
    new NetTask(this){xxx}); net.doGetInDialog(new NetTask(this) {xxx});//get同时打开一个对话框 net.doPostInDialog(new NetTask(this) {xxx});//post同时打开一个对话框 net.doGet(true, new NetTask(this) {xxx});//第一个参数是否显示对话框
    下面看NetTask回调类:
    //当发生错误时回调这个回调是在UI线程中
    public void onErray(Response response)
    //返回数据后会现在后台处理
    public void doInBackground(Response response1)
    //最后会在ui线程处理
    public void doInUI(Response response, Integer transfer) 

    在doInBackground处理过程中就需要处理UI这时可以:

    //在doInBackground添加代码(后台操作)
     public void doInBackground(Response response) {
          super.doInBackground(response);
          //在response中添加传递的对象
          response.addBundle("key", "对象传递");
         //传递到UI,第二个参数为自定义编码
         transfer(response, 100);
     }
    //在doInUI中(UI线程操作)
     public void doInUI(Response response, Integer transfer) {
         if(transfer==100){
             //获取传递的对象
            Object obj=response.getBundle("key")
         }
         }

    response对象指返回的数据:

    String res=response.plain()//可以获取网络访问的纯文本

    JSONObject jo=response.jSON()//可以返回网络访问的json对象

    网络默认最佳返回格式,当然不是必须的:

    {success:true, msg:'消息内容', code:'error' data:{}}

    对应的配置

    下面是Const中的配置你可以进行覆盖:

    public class Const{        
     public static String response_success = "success";//成功与否
    
     public static String response_msg = “msg”;//消息文本
     public static String response_data = “data”;//数据对象
     public static String response_total = "total";//暂时没用
    public static String response_current = "current";//暂时没用
    public static String response_code = "code";//错误code
    }

    反回数据案例分析:

    //假设返回的结果 

    {success:true,
    
           data:{
    
             user:{
    
                id:1212,
    
               name:'tengzhinei'
    
            }   
    
         },
    
       articles:[
    
          {id:1},
    
          {id:2}
    
        ]
    
      }

    json处理:

    boolean success=response.isSuccess();//是否成功,
    JSONObject jo = response.jSONFromData();//获取data节点下的对象
    JSONObject data = response.jSONFrom("data");;//获取data节点下的对象
    JSONObject user = response.jSONFrom("data.user");//获取data.user节点下的对象
    JSONArray array = response.jSONArrayFrom("data.articles");//获取data.articles节点下的数组
    //可以直接将json转为bean:
    User user = response.modelFrom("data.user");//可以直接获取到user对象(这边使用了泛型)
    List<Article> articles = response.listFrom(User.class, "data.articles")//获取对象数组

    ViewUtil 和JSONUtil的使用:

    ViewUtil.bindView(findViewById(R.id.time), JSONUtil.getLong(jo, "time"),"time");

    //第一个参数View 可以为TextView或其子类,如果是imageView(如果第二个参数是字符串会自动下载图片,如果是drawable,bitmap,int或获取直接绑定图片)

    //第二个数 数据

    //第三个数 数据修饰

    3.2.1   dhnet  网络缓存:

    DhNet net=new DhNet();
    
    net.setUrl("http://youxianpei.c.myduohuo.com/mobile_index_adbjsonview?id=63&temp=cache_net_error");
    
    //看这里使用缓存策略
    
    net.useCache(CachePolicy.POLICY_ON_NET_ERROR);
    
    net.doGet(new NetTask(getActivity()) {
    
            @Override
    
     public void doInUI(Response response, Integer transfer) {
    
     //response有方法判断这次结果是不是缓存
    if (!response.isCache()) {
    
           dialoger.showToastShort(getActivity(), "这次访问不是使用的缓存,断开网络试试看");
    
     }else{
    dialoger.showToastShort(getActivity(), "网络访问失败,这次使用的是缓存")
    
       }
    
       }
    
    });

    3.3.1 文件上传:

    DhNet net=new DhNet("路径");
    
     net.addParam("key1", "参数1")
    .addParam("key2", "参数2").upload("文件参数名", file, new NetTask(this) {
    
           @Override
    public void doInUI(Response response, Integer transfer) {
    if (response.isSuccess()) {
     Boolean uploading = response.getBundle("uploading");
    if (!uploading) {
     //上传完成
    }else{
    //已上传大小
    
    long length= response.getBundle("length");
    //文件总大小
    
    long total=  response.getBundle("total");}
    } }});

    上面的代码就是文件上传了,主要就是使用upload方法
    在doInUI会被多次回调用来处理进度,response中有uploading,length,total三个参数用来判断进度

    4.1.1 Adapter 适配器

    Adapter的初始化、加载数据、复制:

    adapter=new NetJSONAdapter("URL", this, R.layout.adapter_item);
    
    //添加参数----请求的参数
    
    adapter.addparam("key1", "key1");
    
    //adapter.addparams(map);
    
    //数据绑定----与 适配器的ItemsLayout布局匹配数据
    
    adapter.addField("username", R.id.name);//  username:反回结果数据的JSONObject的一个字段,key=username
    
    //adapter.addField("activeaddress", R.id.content);
    
    adapter.addField(new FieldMap("activeaddress", R.id.content) {
    
    @Override
    
    public Object fix(View itemV, Integer po, Object o, Object jo) {
    
    JSONObject joo=(JSONObject) jo;
    
    //这里可以做一些额外的工作
    
    itemV.findViewById(R.id.icon).setVisibility(JSONUtil.getInt(joo, "status")==1?View.VISIBLE:View.INVISIBLE);
    
    return o;}});
    //内部点击事件-----指定view的点击事件
    adapter.setOnInViewClickListener(R.id.pic, new BeanAdapter.InViewClickListener() {
    @Override
    public void OnClickListener(View itemV, View v, Integer po,
    Object jo) {
    JSONObject joo=(JSONObject) jo;
    dialoger.showToastLong(getActivity(), JSONUtil.getString(joo, "username"));
    }
    });
    //加载成功后回调
    adapter.setOnLoadSuccess(new LoadSuccessCallBack() {
    @Override
    public void callBack(Response response) {
    if(response.isSuccess()){
    dialoger.showToastShort(getActivity(), "加载成功");
    if(adapter.getPageNo()==1){
    listV.setSelection(0);}
    }}});
    其它操作与BaseAdapter一样。

     4.1.1  DhDb数据库Save对象数据:

    boolean isnew=false;
    
    if(student == null){
    
    student=new Student();
    
    isnew=true;
    
    }
    
    student.setName(nameV.getText().toString());
    
    student.setNum(numV.getText().toString());
    
    student.setSex(Integer.parseInt(sexV.getText().toString()));
    
    student.setAge(Integer.parseInt(ageV.getText().toString()));
    
    student.setDangyuang(dangyuanV.getText().toString().equals("1")?true:false);
    
    student.setCreateTime(new Date());
    
    if(isnew){
    
    db.save(student);
    
    }else{
    
    db.update(student);
    
    }
    
    //查询数据:
    String key="%"+contentV.getText().toString().trim()+"%";
    
    List<Student> list=db.queryList(Student.class, ":name like ? or :num like ?", key,key);
  • 相关阅读:
    vue---echarts图表
    路由嵌套
    VoIP语音通话研究【进阶篇(四):freeswitch+webrtc+sip.js的通话】
    VoIP语音通话研究【进阶篇(三):opensips安装】
    如何在北京退休?
    后端分析/前端分析/边缘分析
    使用curl批量下载图片
    pytorch固定随机种子复现实验结果
    分享一个作为面试官的面试思路
    两个流程链路问题的排查和总结
  • 原文地址:https://www.cnblogs.com/Jsonlu/p/4757655.html
Copyright © 2011-2022 走看看