Android开发请求本地网络数据
Android中网店、外卖项目都会用到实时请求网络数据,通常会遇到很多问题,让我们一起来看下吧!下面举列子在安卓ListView中请求本地网络数据常见步骤如下:
-
首先创建一个用于放在ListView中每一个item的框架栏,如下图所示
-
在主界面创建一个ListView,每一栏存放步骤一中的数据。
-
在utils创建一个Constants工具类用于添加本地网络数据的地址。
public static String BASE_URL = "http://10.136.151.202:8080/mine"; public static String HOME_URL = BASE_URL+"/json/homefragment.json";
-
在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; }
-
准备好一个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年" }
-
在bean中创建一个ProductBeanData类,用于存放解析后的JSON数据。使用google的GsonFormat工具,解析JSON数据。直接Alt+Insert,选择GsonFormat,然后将JSON数据复制过来即可。
-
创建适配器Adapter,将步骤1中定义的TextView和ImageView等通过viewHolder更新网络数据。
viewHolder.predicttime.setText(bean.getPredicttime()); Glide.with(mContext) .load(bean.getIvproductstate()) .error(R.mipmap.ic_launcher) .into(viewHolder.ivproductstate);
-
采用Okhttp访问本地网络通过Handler步骤四的List中。
List<ProductBeanData> List =JsonParse.getInstance(). getProductList(vlResult);
-
为步骤2中的ListView添加适配器。
homelistView.setAdapter(homeAdapter);//为列表设置适配器
-
将步骤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”,问题就解决了!
-