xutils获取json并解析

Android实践:xUtils3探究 一、xUtils3简介 xUtils是一个android使用工具框架,包含了如下几大功能: 注解定义:提供了布局,视图和事件等注解,能够简化相关的Android代码; 网络请求:支持GET、PUT、DELETE和PUT等请求方式,封装了异步Task,支持FIFO和FILO优先级线程池,提供了同步异步请求,支持https、cookie和硬盘缓存等; 图片绑定:封装了内存和硬盘缓存,优化了Bitmap加载过程,处理了ViewHolder产生的图片错乱问题,支持https等; 数据封装:封装了相关 阅读详情

这篇文章主要是利用xutils从服务器获取数据,并用gson解析到本地,显示出来。
这里写图片描述

1、 xutils从服务器获取数据原理:

使用方法:

  HttpUtils http=new HttpUtils;
        http.send(HttpRequest.HttpMethod.GET,"url", new RequestCallBack() {
            @Override
            public void onSuccess(ResponseInfo responseInfo) {

            }
            @Override
            public void onFailure(HttpException e, String s) {

            }
            @Override
            public void onLoading(long total, long current, boolean isUploading) {
                super.onLoading(total, current, isUploading);
            }
        });

1、 发送的参数列表 http.send(HttpRequest.HttpMethod.GET,”url”, new RequestCallBack()。
http.send源代码:

public <T> HttpHandler<T> send(HttpMethod method, String url, RequestCallBack<T> callBack) {
        return this.send(method, url, (RequestParams)null, callBack);
    }

看HttpHnadler类可知,发送的请求最终是在httphandler中的doInBackground,也就是开启任务,发送请求给服务器,使用ResponseInfo类接收从网络获取数据。

 protected Void doInBackground(Object... params) {

2 、 RequestCallBack()源代码如下:抽象类RequestCallBack中的两个抽象方法,分别是成功和失败的回调。成功接收的参数即是从服务器获取的数据ResponseInfo,失败后传入的参数为异常类,打印异常信息。

public abstract class RequestCallBack<T> {
    private static final int DEFAULT_RATE = 1000;
    private static final int MIN_RATE = 200;
    private String requestUrl;
    protected Object userTag;
    private int rate;
    public RequestCallBack() {
        this.rate = 1000;
    }
   public RequestCallBack(int rate, Object userTag) {
        this.rate = rate;
        this.userTag = userTag;
    }
    public void setUserTag(Object userTag) {
        this.userTag = userTag;
    }
    public void onStart() {
    }
    public void onCancelled() {
    }
    public void onLoading(long total, long current, boolean isUploading) {
    }
    public abstract void onSuccess(ResponseInfo<T> var1);
    public abstract void onFailure(HttpException var1, String var2);
}
2、 gson : 使用gson要定义bean类,并且类中定义的名称要和json解析数据的名称相同。

Demo中代码如下:
MainActivity中的代码:

public class MainActivity extends Activity {
    //获取天气的url:http://m.weather.com.cn/atad/101010100.html
    private String url = "https://api.douban.com/v2/book/1220562";
    private TextView tv_tag;
    private ListView listview;
    private MyAdapter adapter;
    private ArrayList<Tag> list;
    private TextView tv_title;
    private TextView tv_price;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // tv_tag=(TextView) findViewById(R.id.tv_tag);
        listview = (ListView) findViewById(R.id.listview);
        tv_title=(TextView) findViewById(R.id.tv_title);
        tv_price=(TextView) findViewById(R.id.tv_price);
        list = new ArrayList<Tag>();
        //初始化数据;
        getData();
        adapter = new MyAdapter(this, list);
        listview.setAdapter(adapter);
    }
    private void getData() {
        // TODO Auto-generated method stub
        HttpUtils http=new HttpUtils();
        http.send(HttpMethod.GET, url, new RequestCallBack<String>() {
           //加载失败的时候;
            @Override
            public void onFailure(HttpException e, String s) {
                // TODO Auto-generated method stub  
            }
           //加载成功;
            @Override
            public void onSuccess(ResponseInfo<String> responseInfo) {
                // TODO Auto-generated method stub
                dealData(responseInfo.result);
                System.out.println("---"+responseInfo.result);
            }
            //正在加载的时候显示;可以显示百分比;也可以弹出对话框之类的提示;
            @Override
            public void onLoading(long total, long current, boolean isUploading) {
                // TODO Auto-generated method stub
                super.onLoading(total, current, isUploading);
            }
        });
    }
    private void dealData(String result) {
        //gson在解析的时候,{}代码对象;【】代表集合;
        Gson gson = new Gson();
        //json中所有的数据已经返回到book实体中;
        Book book = gson.fromJson(result, Book.class);
        Log.i("info", book.getTitle() + ":" + book.getPublisher() + ":"
                + book.getTags().size());
        tv_title.setText("书名:"+book.getTitle());
        tv_price.setText("价格:"+book.getPrice());
        list = book.getTags();
        //list集合加入数据后刷新adapter;不刷新则获取不到数据;
        adapter.refreshData(list);
    }

}

2在适配器中的代码如下:

public class MyAdapter extends BaseAdapter{
    private ArrayList<Tag> list;
    private Context context;
    public MyAdapter(Context context,ArrayList<Tag> list){
       this.context=context;
       this.list=list;
    }
    //刷新list列表中的adapter;
    public void refreshData(ArrayList<Tag> list) {
           this.list=list;
           notifyDataSetChanged();
        }
    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return list.size();

    }
    @Override
    public Object getItem(int position) {
        // TODO Auto-generated method stub
        return position;
    }
    @Override
    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return position;
    }
    @Override
    public View getView(int position, View convertView, ViewGroup viewGroup) {
        // TODO Auto-generated method stub
        ViewHolder vh;
        if(convertView==null){
            vh=new ViewHolder();
            convertView=LayoutInflater.from(context).inflate(R.layout.item, null);
            vh.tv_count=(TextView) convertView.findViewById(R.id.tv_count);
            vh.tv_title=(TextView) convertView.findViewById(R.id.tv_title);
            convertView.setTag(vh); 
        }else{
            vh=(ViewHolder) convertView.getTag();
        }
    vh.tv_count.setText(list.get(position).getCount());
        vh.tv_title.setText(list.get(position).getTitle());
        return convertView;
    }
    static final class ViewHolder{
        TextView tv_count;
        TextView tv_title;
    }

Demo下载地址eclipse版
http://download.youkuaiyun.com/detail/androidxiaogang/9204873

xutils数据库+json解析假接口使用 http://blog.youkuaiyun.com/qq_30651537/article/details/53816058 立即下载

相关推荐

xUtils+gson的简单运用

xUtils 下载json +gson 解析json的简单运用 json数据:{"result":1,"message":"获取信息成功","data":[{"ID":2,"NAME":"呵呵呵呵","TYPE_ID":22,"TEXT":"\u003cimg alt=\"\" src=\"/File/attached/image/20150421/20150421101617_6620.jpg","CREATEDATE":1429582588,"CREATEUID":-1,"UPDATEUID":-1,"UPDATEDATE":1429582588},{"ID":123,"NAME":"电动汽车","TYPE_ID":22,"TEXT":"\u003cimg alt=\"\" src=\"/File/attached/image/20150421/20150421103511_5479.jpg\" /\u003e","CREATEDATE":1429583713,"CREATEUID":-1,"UPDATEUID":-1,"UPDATEDATE":1429583713},],"expansionData":null}

xUtils解析json数据

解析json数据可以使用JsonObject,但是如果数据组成复杂的话,这样解析就会很麻烦。谷歌提供一种解析json数据的方法——-Gson 使用方法: 首先导入gson的jar包; Gson gson = new Gson(); gson.fromJson(string,Class); string : 将要解析的json数据; Class : javaBean(...

weixin_30904593的博客 259

安卓-折叠屏平行视界适配(多厂商兼容与优先级实战)

本文详细解析了安卓折叠屏平行视界适配的现状与挑战,重点探讨了多厂商兼容性策略和优先级冲突的实战解决方案。通过对比Google的Embedding方案和国内厂商的EasyGo标准,提供了检测设备支持方案、处理优先级冲突及双方案共存的最佳实践,帮助开发者高效完成折叠屏适配。

weixin_29190169的博客 162

Android第九讲笔记(xUtils框架,Gson框架)

这里写目录标题1.xUtils框架1.背景2.xUtils简介3.xUtils框架使用方法1.准备工作2.导入依赖3.添加以下代码4.简单案例2.Gson框架1.导入依赖2.案例一(简单json数据解析):3.案例二(json嵌套json数据解析)4.案例三5.使用GsonFormat补充1.学会打断点2.构造接口的平台3.图床的使用 1.xUtils框架 1.背景 在上一讲,我们学习了原生HTTP访问 原生HTTP访问的缺点: 可以看到,这样网络访问有几个缺点 需要自己创建一个线程,在这个线程中进行网

a碟的博客 2389

智能车竞赛循迹控制:基于状态机的直道、弯道、十字路口处理策略

在嵌入式系统与自动控制领域,PID控制算法是实现精确运动控制的基础。其原理是通过比例、积分、微分三个环节的线性组合,对系统误差进行实时校正,从而实现对目标值的快速、稳定跟踪。这项技术的核心价值在于为各类自动控制系统提供了稳定、可靠且易于实现的解决方案,广泛应用于机器人、无人机、工业自动化等场景。在智能车循迹这类特定应用中,赛道环境复杂多变,单一的PID控制器难以应对直道、弯道、十字路口等不同赛道元素的控制需求。此时,有限状态机(FSM)作为一种高效的**决策框架**,能够根据实时感知的赛道特征(如边线曲率、

weixin_34034261的博客 282

Globus数据下载全攻略:从零配置到批量下载大文件(附常见问题解决)

本文详细介绍了Globus数据下载的全流程,从零配置到批量下载大文件的实用技巧,包括环境准备、高级传输策略、性能优化及常见问题解决方案。Globus作为科研数据的高效传输工具,通过并行流传输和自动校验技术,显著提升大规模数据传输的效率和可靠性。

u9v0w的博客 662

Android---Xutils3.0 网络请求框架封装(包含解析)

一、Xutils 3.0简介 xUtils是目前功能比较完善的一个Android开源框架,最近又发布了xUtil3.0,在增加新功能的同时又提高了框架的性能,下面来看看官方(https://github.com/wyouflf/xUtils3)对xUtils3的介绍: xUtils包含了很多实用的android工具;xUtils支持超大文件(超过2G)上传,更全面的http

一江夜雨 1251

DEM数据下载,拼接,裁剪

目录: 1、数字高程模型(DEM)的数据下载 2、在ENVI里面进行拼接,生成SARscape标准格式的DEM数据3、在ArcGIS里面安装已有的矢量范文,进行掩膜裁剪 4、注意事项 数字高程模型的数据下载: 网址:http://dwtkns.com/srtm30m/ 1.对研究区域进行经纬度选择,然后进行选择下载即可 2.下载的数据是.hgt格式的,按照不同的需求进行转换,这里我是用于ENVI处理,且下载了四个,所有进行了拼接,拼接、格式转换如下 注:可能有时候需要登陆注册,点击下...

weixin_40874151的博客 2万+

xutils +Gson解析json(从服务器中获取json并解析)

从服务器获取json函数“http://192.168.3.17:8080/newdata.json“是本地服务器文件的地址 (1.如果在局域网中的ip总是变化 可以进入路由器进行设置 可以与本机匹配固定ip, 2,tomcat默认端口是8080,如果想省略需要去tomcat的配置文件中去配置)vuperson 是首先定义好的bean对象 用来与json数据对应private void g

善雪博客 1380

VirtualBox虚拟机拖放文件总失败?手把手教你配置双向拖放与共享文件夹(Ubuntu版)

本文详细指导如何在VirtualBox的Ubuntu虚拟机中配置高效的数据交换方案。核心是安装VirtualBox Guest Additions,并在此基础上开启双向拖放与共享粘贴板功能,同时建立稳定的共享文件夹,彻底解决主机与虚拟机间文件传输失败的问题,构建无缝的跨系统工作环境。

weixin_29245767的博客 232

YOLOv11架构革新:华为VanillaNet与BiFPN深度融合的突破性改进实战指南

购买即可解锁300+YOLO优化文章,并且还有海量深度学习复现项目,价格仅需两杯奶茶的钱,别人有的本专栏也有!

LXY_LOVE36的博客 136

xUtils3的使用

MainActivity 主要是调用xutils3的各个方法 在导包那里找到org.xutils:xutils:3.5.0 可以获取网络上的数据(get,post) 可以获取图片import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.view.View;import

xiaoxinxin的博客 3629

错误代码105(ERR_NAME_NOT_RESOLVED)详解与解决方案

错误代码105表示"",当您的浏览器无法将网站域名转换为IP地址时就会出现此错误。这是最常见的网络连接问题之一,通常与DNS(域名系统)有关。

欢乐打代码! 1万+

xUtils和FastJson获取和解析网络数据

FastJson解析Json数据

许挂挂的博客 975

(计算机组成原理)第二章数据的表示和运算-第二节:数字电路基础知识

本文介绍了计算机组成原理中的逻辑门电路、多路选择器和三态门。逻辑门电路包括基本逻辑运算(与、或、非)和复合逻辑运算(与非、或非、异或、同或),这些运算通过门电路实现,并满足分配律和结合律。多路选择器(MUX)用于从多个输入信号中选择一个输出,广泛应用于数据选择、资源共享和逻辑函数实现等场景。三态门则具有三种输出状态(高电平、低电平、高阻态),常用于总线控制和信号隔离。这些元件在数字电路设计和计算机系统中具有重要作用。

快乐江湖的博客 2474

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

xutils的使用

/** * 从服务器获取数据 */ private void getDataFromServer() { HttpUtils utils = new HttpUtils(); // 使用xutils发送请求 utils.send(HttpRequest.HttpMethod.GET, GlobalContants.CATEGO

wqewq19的博客 305

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

gson解析json

获得json数据后,放到HiJson工具中,点击格式化JSON字符串

不落航班 988

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

160.n1-解析json中的数据

把json的文件放在服务器中,然后创建一个全局的类方便读取,使用xUtils方便访问网络数据,同时使用Gjson来帮助解析Json数据 服务器的路径数据ClobalContants.java package com.ldw.news.global; /* * 定义一个全局的参数 */ public class ClobalContants { //json文件的tomcat路径,10

augfun的博客 513

网络获取json数据并解析

1、升级流程分析 2、Android通过URL获取网络资源 JSONObject来解析Json字符串 //创建URL对象 //本机地址用localhost, 但是如果用模拟器加载本机的地址时,可以用ip(10.0.2.2)来替换 URL url=new URL("...

weixin_34395205的博客 431

json & gson

使用hijson来看json 可以看到这是带有嵌套,那么我们可以把嵌套的这一部分写成一个内部类 看javabean /** * 网络分类信息的封装 * * 字段名字必须和服务器返回的字段名一致, 方便json解析 * 提示:如果json数据里有某字段,但是类里面没有,则解析的时候忽略。 * 如果类里面有某个字段,但是json里面没有,则解析完后

rjlgo的专栏 526

AndroidStudio 中使用Xutils3注解

新建一个类继承Application  实现里面的onCreate方法 import org.xutils.x; /** * Created by KeLei on 2016/2/2. */ public class LYZApplication extends Application { @Override public void onCreate() {

繁殇_落幕的博客 3324

XUtils初体验,实现一个登陆功能

public class LoginActivity extends BaseActivity implements OnClickListener { private Context context; private EditText username_edi...

chuntianlong5227的博客 81

android 项目学习随笔五(JSON解析)

1、利用Xutils获取网络数据 /** * 从服务器获取数据 需要权限: <uses-permission * android:name="android.permission.INTERNET"/> */ private void getDataFromServer() { HttpUtils utils = new HttpUtils(); utils.send...

weixin_33989780的博客 148

使用fastjson和xUtils框架来获取聚合笑话数据

首先导入fastjson和xUtils包 使用XListView 实现上拉加载更多和下拉刷新 申请聚合数据笑话key 注意使用fastjson对应的json内容必需和聚合里的一样 bean代码如下 package com.app.juhejoke.bean; import java.util.List; /** * Created by Administrator on

cxb0y的专栏 742
上一篇: Universal_image_loader加载网络图片
下一篇: android中Http类的封装
android_xiaogang
博客等级 码龄12年 89粉丝 142原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值