AsyncTask GET请求
布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="net.bwie.network.MainActivity"> <Button
android:id="@+id/get_network_data_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="下载网络数据"/> <Button
android:id="@+id/get_pic_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="获取网络图片"/> <ImageView
android:id="@+id/image_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/ic_launcher"/> </LinearLayout>
Activity:
/**
* 使用异步任务下载网络数据
* 使用gson解析
* 注:有时间看看我讲的原生json解析
*/
public class MainActivity extends AppCompatActivity implements View.OnClickListener { public static final String KAI_YAN_URL = "http://baobab.kaiyanapp.com/api/v4/tabs/selected?udid=11111&vc=168&vn=3.3.1&deviceModel=Huawei%36&first_channel=eyepetizer_baidu_market&last_channel=eyepetizer_baidu_market&system_version_code=20"; protected Button mGetNetworkDataBtn;
protected Button mGetPicBtn;
protected ImageView mImageView; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
super.setContentView(R.layout.activity_main);
initView();
} @Override
public void onClick(View view) {
if (view.getId() == R.id.get_network_data_btn) {
getDatas();
} else if (view.getId() == R.id.get_pic_btn) {
getPicture();
}
} private void getDatas() {
MyTask task = new MyTask();
task.execute(KAI_YAN_URL);
} private void getPicture() {
String imgUrl = "http://img.kaiyanapp.com/1699f3946ccd281230a1d887d169439f.png?imageMogr2/quality/60/format/jpg"; Picasso
.with(this)
.load(imgUrl)
.into(mImageView);
} private void initView() {
mGetNetworkDataBtn = (Button) findViewById(R.id.get_network_data_btn);
mGetNetworkDataBtn.setOnClickListener(MainActivity.this);
mGetPicBtn = (Button) findViewById(R.id.get_pic_btn);
mGetPicBtn.setOnClickListener(MainActivity.this);
mImageView = (ImageView) findViewById(R.id.image_view);
} private class MyTask extends AsyncTask<String, Void, List<KaiYan.ItemBean>> { @Override
protected List<KaiYan.ItemBean> doInBackground(String... params) {
String requestUrl = params[0];
// 使用HTTPUrlConnection
try {
URL url = new URL(requestUrl);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
// 配置connection
connection.setRequestMethod("GET");// GET或POST必须大写
// 连接网络
connection.connect();
// 判断是否连接成功
if (connection.getResponseCode() == 200) {
// 获取来自网络的输入流
// 使用缓冲字符输入流
// 字节流转字符流
BufferedReader br = null;
br = new BufferedReader(new InputStreamReader(connection.getInputStream())); // 最终接收的json字符串
String json = "";
// 使用缓冲流读取到的每一行数据
String line = ""; while ((line = br.readLine()) != null) {
json += line.trim();
}
// json数据产生完毕,该解析了
Gson gson = new Gson();
KaiYan kaiYan = gson.fromJson(json, KaiYan.class);
List<KaiYan.ItemBean> itemList = kaiYan.getItemList();
return itemList; }
} catch (Exception e) {
e.printStackTrace();
Toast.makeText(MainActivity.this, "下载错误", Toast.LENGTH_SHORT).show();
} return null;
} @Override
protected void onPostExecute(List<KaiYan.ItemBean> itemList) {
super.onPostExecute(itemList); // 可以使用RecyclerView或ListView展示数据
for (KaiYan.ItemBean itemBean : itemList) {
Log.d("1507", "type: " + itemBean.getType() +
", title: " + itemBean.getData().getTitle() +
", url" + itemBean.getData().getPlayUrl());
}
}
} }
Bean:
package net.bwie.network.bean; import java.util.List; public class KaiYan { private List<ItemBean> itemList; public List<ItemBean> getItemList() {
return itemList;
} public void setItemList(List<ItemBean> itemList) {
this.itemList = itemList;
} public static class ItemBean { private String type = "";
private DataBean data; public String getType() {
return type;
} public void setType(String type) {
this.type = type;
} public DataBean getData() {
return data;
} public void setData(DataBean data) {
this.data = data;
} public static class DataBean { private String playUrl = "";
private String title = ""; public String getPlayUrl() {
return playUrl;
} public void setPlayUrl(String playUrl) {
this.playUrl = playUrl;
} public String getTitle() {
return title;
} public void setTitle(String title) {
this.title = title;
}
} } }
权限: <uses-permission android:name="android.permission.INTERNET"/>
AsyncTask GET请求的更多相关文章
- AsyncTask POST请求
布局: <?xml version="1.0" encoding="utf-8"?> <android.support.constraint. ...
- Android使用AsyncTask设置请求超时的注意事项
备注:该篇文章为原创,转载请声明地址,谢谢! /** * AsyncTaskTools2集成了AsyncTask类 * 前三个参数为回到函数,最后一个为全局的Context */ final Asyn ...
- Android性能优化典例(二)
1.使用 Maven 依赖方案代替使用导入jar包方案 如果项目中需要用到第三方jar包,常用的做法是去网上下载后然后放入libs文件夹,再添加到项目依赖,不过,在Android Studio已经不推 ...
- (转载) 清理缓存 IPackageStatsObserver
清理缓存 IPackageStatsObserver 2016-04-10 13:40 2288人阅读 评论(0) 收藏 举报 分类: android(59) 版权声明:本文为博主原创文章,未经博 ...
- Android Studio利用异步任务AsyncTask发送post请求获取json数据
syncTask,是Android提供的轻量级的异步类,可以直接继承AsyncTask,在类中实现异步操作,并提供接口反馈当前异步执行的程度(可以通过接口实现UI进度更新),最后反馈执行的结果给UI主 ...
- AsyncTask异步加载和HttpURLConnection网络请求数据
//获得网络数据 private void huodeshuju() { //这里是使用线程,已注释掉 /*new Thread(){ public void ...
- Android之三种网络请求解析数据(最佳案例)
AsyncTask解析数据 AsyncTask主要用来更新UI线程,比较耗时的操作可以在AsyncTask中使用. AsyncTask是个抽象类,使用时需要继承这个类,然后调用execute()方法. ...
- Android 旋转屏幕--处理Activity与AsyncTask的最佳解决方案
一.概述 运行时变更就是设备在运行时发生变化(例如屏幕旋转.键盘可用性及语言).发生这些变化,Android会重启Activity,这时就需要保存activity的状态及与activity相关的任务, ...
- Android笔记——AsyncTask介绍
AsyncTask和Handler对比 1 ) AsyncTask实现的原理,和适用的优缺点 AsyncTask,是android提供的轻量级的异步类,可以直接继承AsyncTask,在类中实现异步操 ...
随机推荐
- django2笔记:路由path语法
django2笔记:路由path语法 9月23,Django 发布了2.0a1版本,这是一个 feature freeze 版本,如果没有什么意外的话,2.0正式版不会再增加新的功能了.按照以往的规律 ...
- Android开发艺术探索学习笔记(四)
第四章 View的工作原理 4.1初识ViewRoot和DecorView ViewRoot是连接WindowManager和DecorView的纽带,View的三大流程均是通过ViewRoot来完成 ...
- php -- 配置与安装
1.php与apache安装路径 2.安装Apache服务 httpd -k install 开启关闭重启服务 http -k start/stop/restart 3.php.ini-develop ...
- GO入门——2. 变量
1 基本类型 零值并不等于空值,而是当变量被声明为某种类型后的默认值, 通常情况下值类型的默认值为0,bool为false,string为空字符串,引用为nil. 1.1 布尔类型 关键字:bool ...
- 在vue中使用vuex 一个简单的实例
1.安装vuex:npm install vuex --save 2.在main.js文件中引入vuex (请忽略其它代码) 3.建一个vuex文件夹,然后在建一个store.js(这两个文件名字可以 ...
- java操作特殊字符需要注意的点
在使用字符串替换,分离时 我们如果想替换一个字符串中的问号,我们就不能直接写问号,而要写[?] 实例如下 str = str.replaceAll("\""," ...
- elk-nginx输出json格式的日志
把Nginx日志的格式输出成JSON格式展示在Kibana面板,生产环境中基本都是这么使用. 1, 配置nginx 主要修改nginx的访问日志格式,这里定义成json格式,以便后面logstash更 ...
- 深入理解java中HelloWorld的执行流程
HelloWorld.java是我们学习java的第一个程序,简单的再也不能简单了,可是里面的原理以及执行流程大家都知道吗?最近在复习java知识,特地钻研了一番分享给大家! 贴出HelloWorld ...
- solr(一) : 整合 tomcat
前面 lucene 初探 都是为了solr打基础的. 虽然lucene 的filter 没有涉及, 但是打基础, 差不多够用了. 一. solr 和 lucene 的区别 这里我就用自己的理解来说了, ...
- 面试题----makefile文件的作用
make工具和makefile文件 make工具和makefile文件简介 make命令和makefile文件的结合提供了一个在项目管理领域十分强大的工具.它不仅常被用于控制源代码的编译和链接,而且还 ...