Android开发请求网络数据相关问题

本文聚焦Android开发请求本地网络数据,以在安卓ListView中请求数据为例,介绍常见步骤,包括创建框架栏、ListView、工具类、解析类等,还提及准备JSON数据包、创建适配器等操作。同时解决了Android P版本以上因限制明文流量导致的联网失败问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Android开发请求本地网络数据

Android中网店、外卖项目都会用到实时请求网络数据,通常会遇到很多问题,让我们一起来看下吧!下面举列子在安卓ListView中请求本地网络数据常见步骤如下:

  1. 首先创建一个用于放在ListView中每一个item的框架栏,如下图所示
    在这里插入图片描述

  2. 在主界面创建一个ListView,每一栏存放步骤一中的数据。

在这里插入图片描述

  1. 在utils创建一个Constants工具类用于添加本地网络数据的地址。

    public static  String BASE_URL = "http://10.136.151.202:8080/mine";
    public static  String HOME_URL = BASE_URL+"/json/homefragment.json";
    
  2. 在utils创建一个JsonParse解析类,将获取到的信息存储到List中。

    public List<ProductBeanData> getProductList(String json) {
            Gson gson = new Gson(); // 使用gson库解析JSON数据
            // 创建一个TypeToken的匿名子类对象,并调用对象的getType()方法
            Type listType = new TypeToken<List<ProductBeanData>>() {
            }.getType();
            // 把获取到的信息集合存到ProductList中
            List<ProductBeanData> ProductList = gson.fromJson(json, listType);
            return ProductList;
        }
    
  3. 准备好一个JSON数据包,最便捷的方式,采用记事本编辑,然后通过JSON格式化工具检查下错误,最后直接修改.txt后缀为.json。

    {
    		"id": "1",
    		"ivproduct": "http://10.136.152.202:8080/mine/image/homefragment/caimeiji.png",
    		"productname": "采煤机",
    		"productstate": "报警",
    		"ivproductstate": "http://10.136.152.202:8080/mine/image/homefragment/red_circle.png",
    		"runstate": "运行",
    		"alarmtime": "0.5h",
    		"todaytime": "5h",
    		"predicttime": "70年"
    	}
    
  4. 在bean中创建一个ProductBeanData类,用于存放解析后的JSON数据。使用google的GsonFormat工具,解析JSON数据。直接Alt+Insert,选择GsonFormat,然后将JSON数据复制过来即可。

  5. 创建适配器Adapter,将步骤1中定义的TextView和ImageView等通过viewHolder更新网络数据。

    viewHolder.predicttime.setText(bean.getPredicttime());
                Glide.with(mContext)
                        .load(bean.getIvproductstate())
                        .error(R.mipmap.ic_launcher)
                        .into(viewHolder.ivproductstate);
    
  6. 采用Okhttp访问本地网络通过Handler步骤四的List中。

    List<ProductBeanData> List =JsonParse.getInstance().                                getProductList(vlResult);
    
  7. 为步骤2中的ListView添加适配器。

    homelistView.setAdapter(homeAdapter);//为列表设置适配器
    
  8. 将步骤5中的JSON数据包存放在Tomcat/webapps/ROOT路径下,然后打开bin目录下的start.bat,开启本地服务器。

    这时发现Android代码运行成功,但是仍然无法在ListView中看到数据,Log.e(“TAG”, “联网失败” + e.getMessage());通过log发现not permitted by network security policy这个错误。

    • 由于 Android P(版本27以上) 限制了明文流量的网络请求,非加密的流量请求都会被系统禁止掉。

    • 找到在AndroidManifest.xml的文件的application中增加:android:usesCleartextTraffic=“true”,问题就解决了!

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值