通过异步AsyncTask进行网络连接和Gson解析
2018-01-12 14:23
399 查看
当进行耗时操作时,一般用异步任务或开子线程的方式来完成,本文通过AsynvTask异步任务来进行
MainActivity代码
public class MainActivity extends AppCompatActivity {
private TextView tv;
String url="http://169.254.167.244:8080/Web_Data/GetPhones?pagesize=10&pageindex=1";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv=(TextView)findViewById(R.id.tv);
new AsyncTask<String, Void, String>() {
@Override
protected String doInBackground(String... params) {
try {
URL url1=new URL(url);
HttpURLConnection huc=(HttpURLConnection)url1.openConnection();
huc.setConnectTimeout(3000);//设置请求超时时间
huc.setRequestMethod("GET");//设置请求方法
huc.connect();//去连接网络
//如果响应码返回是200就是请求成功
if(huc.getResponseCode()==200){
InputStream inputStream = huc.getInputStream();
byte[] b=new byte[1024];
int len=0;
ByteArrayOutputStream outputStream=new ByteArrayOutputStream();
StringBuilder sb=new StringBuilder();
while((len=inputStream.read(b))!=-1){
sb.append(new String(b,0,len));
outputStream.write(b,0,len);
}
byte[] img = outputStream.toByteArray();
Bitmap bitmap= BitmapFactory.decodeByteArray(img,0,img.length);
return bitmap;
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
Log.i("json","json:"+s);
Gson gson=new Gson();
Phone phone = gson.fromJson(s, Phone.class);
String brand = phone.getPhones().get(0).getBrand();
tv.setText(brand);
}
}.execute(url);
}
}要解析的Phone实体类,一般我们创建实体类是自动解析,通过Alt+Ins
选择gsonformat打开界面,把接口复制粘贴进去再OK,json就自动解析为实体类啦
public class Phone {
/**
* status : OK
* page : 10
* count : 1
* phones : [{"id":1,"price":8044.13,"brand":"三星","model":"V41"},{"id":2,"price":6925.13,"brand":"华为","model":"V31"},{"id":3,"price":201.63,"brand":"三星","model":"V51"},{"id":4,"price":4272.2,"brand":"魅族","model":"V31"},{"id":5,"price":7530.54,"brand":"中兴","model":"V51"},{"id":6,"price":6797,"brand":"魅族","model":"V31"},{"id":7,"price":8633.2,"brand":"三星","model":"V51"},{"id":8,"price":1833.06,"brand":"三星","model":"V01"},{"id":9,"price":2630.04,"brand":"小米","model":"V01"},{"id":10,"price":6300.96,"brand":"小米","model":"V31"}]
*/
private String status;
private int page;
private int count;
private List<PhonesBean> phones;
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public int getPage() {
return page;
}
public void setPage(int page) {
this.page = page;
}
public int getCount() {
return count;
}
public void setCount(int count) {
this.count = count;
}
public List<PhonesBean> getPhones() {
return phones;
}
public void setPhones(List<PhonesBean> phones) {
this.phones = phones;
}
public static class PhonesBean {
/**
* id : 1
* price : 8044.13
* brand : 三星
* model : V41
*/
private int id;
private double price;
private String brand;
private String model;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public String getBrand() {
return brand;
}
public void setBrand(String brand) {
this.brand = brand;
}
public String getModel() {
return model;
}
public void setModel(String model) {
this.model = model;
}
}
}
MainActivity代码
public class MainActivity extends AppCompatActivity {
private TextView tv;
String url="http://169.254.167.244:8080/Web_Data/GetPhones?pagesize=10&pageindex=1";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv=(TextView)findViewById(R.id.tv);
new AsyncTask<String, Void, String>() {
@Override
protected String doInBackground(String... params) {
try {
URL url1=new URL(url);
HttpURLConnection huc=(HttpURLConnection)url1.openConnection();
huc.setConnectTimeout(3000);//设置请求超时时间
huc.setRequestMethod("GET");//设置请求方法
huc.connect();//去连接网络
//如果响应码返回是200就是请求成功
if(huc.getResponseCode()==200){
InputStream inputStream = huc.getInputStream();
byte[] b=new byte[1024];
int len=0;
ByteArrayOutputStream outputStream=new ByteArrayOutputStream();
StringBuilder sb=new StringBuilder();
while((len=inputStream.read(b))!=-1){
sb.append(new String(b,0,len));
outputStream.write(b,0,len);
}
byte[] img = outputStream.toByteArray();
Bitmap bitmap= BitmapFactory.decodeByteArray(img,0,img.length);
return bitmap;
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
Log.i("json","json:"+s);
Gson gson=new Gson();
Phone phone = gson.fromJson(s, Phone.class);
String brand = phone.getPhones().get(0).getBrand();
tv.setText(brand);
}
}.execute(url);
}
}要解析的Phone实体类,一般我们创建实体类是自动解析,通过Alt+Ins
选择gsonformat打开界面,把接口复制粘贴进去再OK,json就自动解析为实体类啦
public class Phone {
/**
* status : OK
* page : 10
* count : 1
* phones : [{"id":1,"price":8044.13,"brand":"三星","model":"V41"},{"id":2,"price":6925.13,"brand":"华为","model":"V31"},{"id":3,"price":201.63,"brand":"三星","model":"V51"},{"id":4,"price":4272.2,"brand":"魅族","model":"V31"},{"id":5,"price":7530.54,"brand":"中兴","model":"V51"},{"id":6,"price":6797,"brand":"魅族","model":"V31"},{"id":7,"price":8633.2,"brand":"三星","model":"V51"},{"id":8,"price":1833.06,"brand":"三星","model":"V01"},{"id":9,"price":2630.04,"brand":"小米","model":"V01"},{"id":10,"price":6300.96,"brand":"小米","model":"V31"}]
*/
private String status;
private int page;
private int count;
private List<PhonesBean> phones;
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public int getPage() {
return page;
}
public void setPage(int page) {
this.page = page;
}
public int getCount() {
return count;
}
public void setCount(int count) {
this.count = count;
}
public List<PhonesBean> getPhones() {
return phones;
}
public void setPhones(List<PhonesBean> phones) {
this.phones = phones;
}
public static class PhonesBean {
/**
* id : 1
* price : 8044.13
* brand : 三星
* model : V41
*/
private int id;
private double price;
private String brand;
private String model;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public String getBrand() {
return brand;
}
public void setBrand(String brand) {
this.brand = brand;
}
public String getModel() {
return model;
}
public void setModel(String model) {
this.model = model;
}
}
}
相关文章推荐
- 【Android学习笔记系列】AsyncTask、BaseAdapter整合异步加载用例(通过解析JSON格式数据加载网络图片内容)
- listView利用BaseAdapter及异步任务Gson解析,使用Picasso网络获取资源进行图文混排,PullToRefresh上拉刷新下拉加载
- 获取网络数据进行Gson解析用ListView展示
- 使用黑莓8900通过蓝牙连接华为交换机进行现场网络配置与操作(一)
- Android中通过Gson进行json解析
- android 子线程进行网络连接等操作-AsyncTask方法
- Linux主机通过代理服务器进行网络连接
- Android异步任务AsyncTask使用解析 获取网络图片
- Android数据解析之JSON,网络编程之URL,异步任务AsyncTask讲解
- 网络异步连接参数解析——利用配置好的APache本地服务器做测试
- VS2005通过网络连接CE设备进行调试开发
- C++解析JSON进行网络传输--一个通过JSON方式的socket传输
- android通过json解析到的路径后异步加载网络图片
- 练习题——Gson解析、利用JDBC连接数据库进行数据的存取及查询等的综合
- AsyncTask 异步任务 + json 解析 网络数据
- Android通过APN进行网络连接
- ADB 通过网络连接设备进行调试
- 通过httpUtils请求网络xml数据进行解析
- Android中网络获取数据进行Gson解析
- 如何通过网络连接进行ADB调试