Android网络请求与数据解析,Gson和GsonFormat解析复杂Json数据

作者 : 开心源码 本文共4864个字,预计阅读时间需要13分钟 发布时间: 2022-05-12 共227人阅读

一:简介

【达叔有道】软件技术人员,时代作者,从 Android 到全栈之路,我相信你也能!阅读他的文章,会上瘾!You and me, we are family !

二:前言

在开发中我们要面对很复杂的操作,那么今天的网络请求与数据解析也是对于学习Android开发者来说,需要处理的难题,我只是讲解一下知识内容,使用于了解这方面的知识点。

三:HttpUrlConnection和JSON数据解析

网络请求有两种类型,一个是get,另一个是post。网络请求通常用HttpUrlConnction,HttpClient,还有更多的框架用,这些框架也是其余人自己开发出来便于用的。

对于json解析,官方的原生解析和Gson解析,JSON是一种轻量级的数据交换格式,有很好的可读性和快速编写的特点。建议你能下载一个Google插件,JSON Viewer能便于看起来舒服点。

看看JSON数据api: https://www.sojson.com/open/api/weather/json.shtml?city=%E4%B8%8A%E6%B5%B7

在你的Android Studio中也提供一个插件名为:GsonFormat,GsonFormat能帮你格式化Json数据,并自动生成相应的属性类。这个插件是不是很好,那就下载吧,假如项目巨大,你的Json数据多到你也不想打代码了吧!

下载完Android Studio中的插件时(过程能百度)重新启动一下就行。我们来验证能否安装成功,找个java文件按alt+S,弹出GsonFormat的窗口则代表安装成功。

在GsonFormat中,放入https://www.sojson.com/open/api/weather/json.shtml?city=%E4%B8%8A%E6%B5%B7(复制一律放入),点击Format就可。

有了GsonFormat的功可以,我们就不使用辛苦生成Json数据里的属性类。

四:用json解析

JSON数据一般由服务器端提供接口,我们根据接口地址解析数据,而后把数据显示在APP上。

举例:接口地址

多个数据

{

'students':[

{'id':'1',

'name':'peipei',

'sex':'男'},

{'id':'2',

'name':'kebin',

'sex':'男'},

{'id':'3',

'name':'hong',

'sex':'女'},

]

}

private void parseJson(String strResult){

try{

JSONArray obj = new JSONObject(strResult).getJSONArray(“students”);

String s=””;

for(int i=0;i<obj.length();i++){

JSONObject json = (JSONObject)obj.get(i);

int id = json.getInt(“id”);

String name=json.getString(“name”);

String sex=json.getString(“sex”);

s+=”Id号:”+id+”,名字:”+name+”,性别:”+sex+”\n”;

}

}catch(JSONException e){

e.printStackTrace();

}

假如这样写我的天,也是挺累,对于用Gson来说就很方便啦。待会我来讲用方法。

对于Android来说重要的网络部分,如何处理从网络上下载数据,如何处理上传,等。我们开发app会不断向服务器发送请求,那么返回到APP的是json数据的字符串,我们需要对json数据进行解析才可以显示到app用户端上。对于HTTP协议是这样的,http为超文本传送协议,是web的基础,http是建立在tcp上的一种。http在用户端发送请求都要服务器回送响应,请求结束后,会主动释放。这个过程连接到关闭为一次连接。

五:网络权限

在我们用网络请求的时候,需要的是设置权限,这一点千万别不记得了。

六:用Gson

Gson就是一个jar包,导入就行,源代码能看看:https://github.com/google/gson

我们只需在build.gradle的dependencies下

放入代码:

implementation 'com.google.code.gson:gson:2.2.4'

//我的是导入的

我们来用这个接口试试:https://www.sojson.com/open/api/weather/json.shtml?city=%E5%B9%BF%E5%B7%9E

用Gson,解析

public static WeatherBean getWeather(String res) {

//创立Gson对象

Gson gson =new Gson();

//gson.fromJson(参数1,参数2);

WeatherBean wetherBean = gson.fromJson(res, WeatherBean.class);

//返回

return wetherBean;

}

七:比较详细地说明

//HttpUrlConnection

//1.实例化一个URL的对象

//2.获取HttpUrlConnection对象

//3.设置请求连接的属性

//4.获取响应码,判断能否连接成功

//5.读取输入流并解析

八:

要创立一个子线程

new Thread(){

@Override

public void run(){

try{

URL url = new URL(“api地址”);

HttpURLConnection coon=(HttpURLConnection)url.openConnection();

coon.setRequestMethod(“GET”);

coon.setReadTimeout(6000);

//获取响应码

If(coon.getResponseCode()==200){

InputStream in=coon.getInputStream();

byte[] b = new byte[1024*512];

int len=0;

//建立缓存流,保存所读取的字节数组

ByteArrayOutputStream baos = new ByteArrayOutputStream();

while((len=in.read(b))>-1){

baos.write(b,0,len);

}

String msg = baos.toString();

Log.e(“TAG”,msg);

//JSON数据的解析:1.原生解析2.gson解析

JSONObject obj = new JSONObject(msg);//捕获异常

int dui = obj.getInt(“dui”);

String msg2 = obj.getString(“msg”);

Log.e(“TAG,”+dui+” “+msg2);

JSONObject data = obj.getJSONObject(“data”);

String title = data.getString(“title”);

String author = data.getString(“author”);

String content = data.getString(“content”);

Log.e(“TAG”,”标题:”+title+”,作者”+author+”,内容:”+content);

//显示 处理问题-将操作权交还给主线程

Message message = handler.obtainMessage();

Weather e = new Weather (title,author,content);

message.obj = e;

//调使用此方法,会触发主线程中Handler对象里覆盖了的handleMessage方法

handler.sendMessage(message);

//nameView.setText(title);

//authorView.setText(author);

//contentView.setText(content);

}

}catch(MalformedURLException e){

e.printStackTrace();

}catch(IOExeption e){

e.printStackTrace();

}catch(JSONException e){

e.printStackTrace();

}

}

}.start();

//Hander hander = new Hander()

这个使用来处理主线程和子线程进行交互的问题

//封装对象

private Hander handler = new Handler(){

@Override

public void handleMessage(Message msg){

super.handleMessage(msg);

//获取

Weather e = (Weather)msg.obj;

nameView.setText(e.getTitle());

authorView.setText(e.getAuthor());

contentView.setText(e.getContent());

}

};

//用Gson解析上一步

//1.创立Gson对象

Gson gson = new Gson();

//参数1:满足json对象格式的字符串

String data=obj.getString(“data”);

Weather e = gson.fromJson(data,Weather.class);

//JSONObject jo= new JSONObject(result);

//JSONArray ary = jo.getJSONArray(“data”);

//for(int i=0;i

//JSONObject obj = ary.getJSONObject(i):

//String a = obj.getString(“name”);

//}

private void parseJson(String strResult){

try{

JSONArray obj = new JSONObject(strResult).getJSONArray(“students”);

String s=””;

for(int i=0;i<obj.length();i++){

JSONObject json = (JSONObject)obj.get(i);

int id = json.getInt(“id”);

String name=json.getString(“name”);

String sex=json.getString(“sex”);

s+=”Id号:”+id+”,名字:”+name+”,性别:”+sex+”\n”;

}

}catch(JSONException e){

e.printStackTrace();

}

//比较

String data=new JSONObject(result).getString(“data”);

//用Gson

Gson gson = new Gson();

//用Gson,快速解析,增加jar包

//1.解析普通的json对象

//2.解析json数组

//参数1:满足json数组形式的字符串

//参数2:Type对象,泛型将会决定,你的json字符串最后被转化成的类型

ArrayList objects = gson.fromJson(data,new TypeToken>(){}.getType());

以上就是个人记录知识点

编辑 :达叔

定位:分享 Android&amp;Java 知识点

说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » Android网络请求与数据解析,Gson和GsonFormat解析复杂Json数据

发表回复