废话不多白吃,代码如下:

1.MainActivity

package com.yz.day11_22_handler;

import android.app.Activity;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.widget.ImageView;
import android.widget.ListView; import com.google.gson.Gson; import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject; import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.List; import static com.yz.day11_22_handler.R.id.lv_news; public class MainActivity extends AppCompatActivity { private static MyAdapter mAdapter;
private static ListView mLv_news; //创建Handler对象
static class MyHandler extends Handler
{ private final WeakReference<Activity> reference;
private List<Feed> feeds; public MyHandler(Activity activity)
{
reference = new WeakReference<Activity>(activity);
} @Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
if (reference.get() != null)
{
switch (msg.what)
{
case HttpUtils.DATA_JSON:
String json = (String) msg.obj;
//解析json数据
feeds = parseJson(json);
mAdapter.setData(feeds);
break;
case HttpUtils.DATA_IMAGE:
Bitmap bitmap = (Bitmap) msg.obj;
Bundle bundle = msg.getData();
String url = bundle.getString("url","http://litchiapi.jstv.com/Attachs/Article/252444/87015790b2724a13a46fbad8712c99dc_padmini.PNG");
Log.i("tag", "=============url"+url);
ImageView iv_conver = (ImageView) mLv_news.findViewWithTag(url);
if (iv_conver != null)
{
iv_conver.setImageBitmap(bitmap);
}
break;
}
}
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); //获取控件
mLv_news = (ListView) findViewById(lv_news);
//创建Handler对象
MyHandler mHandler = new MyHandler(this);
//创建HttpUtils对象,传递数据
HttpUtils utils = new HttpUtils(mHandler);
mAdapter = new MyAdapter(utils);
mLv_news.setAdapter(mAdapter);
utils.getDataFromNetWork(Url.JSONURL,1);
}
private static List<Feed> parseJson(String json)
{
try {
JSONArray jsonArray = new JSONObject(json).getJSONObject("paramz").getJSONArray("feeds");
List<Feed> list = new ArrayList<>();
Gson gson =new Gson();
for (int i = 0;i < jsonArray.length();i++)
{
          //两种解析方式
// TypeToken<Feed> typeToken = new TypeToken<Feed>(){};
// Feed feed = (Feed) gson.fromJson(jsonArray.getJSONObject(i).getJSONObject("data").toString(), typeToken.getRawType());
JSONObject jsonObject = jsonArray.getJSONObject(i).getJSONObject("data");
Feed feed = new Feed();
feed.setChanged(jsonObject.getString("changed"));
feed.setSubject(jsonObject.getString("subject"));
feed.setSummary(jsonObject.getString("summary"));
feed.setCoverd(jsonObject.getString("cover"));
list.add(feed);
}
return list;
} catch (JSONException e) {
e.printStackTrace();
}
return null;
} }
2.MyAdapter
package com.yz.day11_22_handler;

import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView; import java.util.List; /**
* Created by 于超 on 2016/11/22.
*/ public class MyAdapter extends BaseAdapter { private List<Feed> list ;
private HttpUtils utils;
public MyAdapter(HttpUtils utils)
{
this.utils = utils;
}
//定义一个方法用来添加数据
public void setData(List<Feed> list)
{
this.list = list;
notifyDataSetChanged(); }
@Override
public int getCount() {
return list != null?list.size():0;
} @Override
public Object getItem(int i) {
return list.get(i);
} @Override
public long getItemId(int i) {
return i;
} @Override
public View getView(int i, View view, ViewGroup viewGroup) { MyHolder myHolder;
if (view == null)
{
view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item_list,viewGroup,false);
myHolder = new MyHolder(view);
view.setTag(myHolder);
}else
{
myHolder = (MyHolder) view.getTag();
}
Feed feed = list.get(i);
myHolder.tv_subject.setText(feed.getSubject());
myHolder.tv_summary.setText(feed.getSummary());
myHolder.tv_changed.setText(feed.getChanged());
//获取图片地址
String imagePaht = feed.getCoverd();
String url_image = Url.BASEURL+imagePaht;
utils.getDataFromNetWork(url_image,2);
//为控件设置标签,以便通过标签查找获取
myHolder.iv_conver.setTag(url_image);
return view;
}
class MyHolder
{
private TextView tv_subject,tv_summary,tv_changed;
ImageView iv_conver; public MyHolder(View convertView)
{
tv_subject = (TextView) convertView.findViewById(R.id.tv_subject);
tv_summary = (TextView) convertView.findViewById(R.id.tv_summary);
tv_changed = (TextView) convertView.findViewById(R.id.tv_changed);
iv_conver = (ImageView) convertView.findViewById(R.id.iv_conver);
}
}
}
3.HttpUtils(在这里创建了一个线程池,看起来效率更高一点)
package com.yz.day11_22_handler;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log; import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors; /**
* Created by Administrator on 2016/11/22.
*/ public class HttpUtils {
static final int DATA_JSON = 1;
static final int DATA_IMAGE = 2;
private static Handler mHandler;
private final ExecutorService mPool; public HttpUtils(Handler handler)
{
this.mHandler = handler;
//创建一个拥有6条子线程的线程池对象
mPool = Executors.newFixedThreadPool(6);
} public void getDataFromNetWork(final String path,final int type)
{
mPool.execute(new Runnable() {
@Override
public void run() {
try {
URL url = new URL(path);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
if (connection.getResponseCode() == 200)
{
InputStream inputStream = connection.getInputStream();
byte[] buffer = new byte[1024];
int len = 0;
ByteArrayOutputStream baos = new ByteArrayOutputStream();
while((len =inputStream.read(buffer))!= -1)
{
baos.write(buffer,0,len);
}
byte[] data = baos.toByteArray();
//根据type的不同,选择获取不同的数据类型
switch (type)
{
case DATA_JSON:
String json = new String(data);
Message msg = Message.obtain();
msg.what = DATA_JSON;
msg.obj = json;
mHandler.sendMessage(msg);
break;
case DATA_IMAGE:
//将图片传递到handler
Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);
Log.i("tag", "===============data"+new String(data));
Message msg1 = Message.obtain();
msg1.what = DATA_IMAGE;
msg1.obj = bitmap; Bundle bundle = new Bundle();
bundle.putString("url",path);
msg1.setData(bundle);
mHandler.sendMessage(msg1);
break;
}
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}); }
}
 
 

利用Handler访问网络数据的更多相关文章

  1. Android利用Fiddler进行网络数据抓包

    最新最准确内容建议直接访问原文:Android利用Fiddler进行网络数据抓包 主要介绍Android及IPhone手机上如何进行网络数据抓包,比如我们想抓某个应用(微博.微信.墨迹天气)的网络通信 ...

  2. Android利用Fiddler进行网络数据抓包,手机抓包工具汇总

    Fiddler抓包工具 Fiddler抓包工具很好用的,它可以干嘛用呢,举个简单例子,当你浏览网页时,网页中有段视频非常好,但网站又不提供下载,用迅雷下载你又找不到下载地址,这个时候,Fiddler抓 ...

  3. Android利用Fiddler进行网络数据抓包【怎么跟踪微信请求】

    主要介绍Android及IPhone手机上如何利用Fiddler进行网络数据抓包,比如我们想抓某个应用(微博.微信.墨迹天气)的网络通信请求就可以利用这个方法. Mac 下请使用 Charles 代替 ...

  4. [转] Android利用Fiddler进行网络数据抓包

    主要介绍Android及IPhone手机上如何利用Fiddler进行网络数据抓包,比如我们想抓某个应用(微博.微信.墨迹天气)的网络通信请求就可以利用这个方法. Mac 下请使用 Charles 代替 ...

  5. Android利用Fiddler进行网络数据抓包,手机抓包工具汇总,使用mono运行filddler

    Fiddler抓包工具 Fiddler抓包工具很好用的,它可以干嘛用呢,举个简单例子,当你浏览网页时,网页中有段视频非常好,但网站又不提供下载,用迅雷下载你又找不到下载地址,这个时候,Fiddler抓 ...

  6. MX2怎样利用Fiddler进行网络数据抓包

    首先须要保证PC与手机在同一局域网内或有独立公网IP, 下面以在同一局域网为例(保证手机能訪问到这台PC机器): 1. PC端配置 1). 安装Fiddler 2). 开启Fiddler下面功能:   ...

  7. NSURLSession访问网络数据

    1.NSMutableURLRequest的设置 //创建NSMutableURLRequest对象 NSMutableURLRequest *request = [NSMutableURLReque ...

  8. 利用ASIHTTPRequest访问网络

    ASIHTTPRequest是第三方类库,ASIHTTPRequest对CFNetwork API进行了封装. 有如下特点: l 通过简单的接口,即可完成向服务端提交数据和从服务端获取数据的工作 l ...

  9. SWIFT中使用AFNetwroking访问网络数据

    AFNetworking 是 iOS 一个使用很方便的第三方网络开发框架,它可以很轻松的从一个URL地址内获取JSON数据. 在使用它时我用到包管理器Cocoapods 不懂的请移步: Cocoapo ...

随机推荐

  1. 有关web 语义的文章总结

         A web of data that can be processed directly and indirectly by machines.  --Tim Berners-Lee web ...

  2. LuaInterface简介

    Lua是一种很好的扩展性语言,Lua解释器被设计成一个很容易嵌入到宿主程序的库.LuaInterface则用于实现Lua和CLR的混合编程. (一)Lua from the CLR 测试环境:在VS2 ...

  3. Android之TextView的Span样式源码剖析

           Android中的TextView是个显示文字的的UI类,在现实中的需求中,文字有各式各样的样式,TextView本身没有属性去设置实现,我们可以通过Android提供的 Spannab ...

  4. 编辑器之神VIM 总结(一) 基础部分

     版本号 说明 作者 日期  1.0  vim基础知识 Sky Wang 2013/06/19       概要 vim和emacs,一个是编辑器之神,一个是神一样的编辑器.他们被称是UNIX系统下的 ...

  5. Python文件操作详解

    Python内置了一个open()方法,用于对本地文件进行读写操作.这个功能简单.实用,属于必须掌握的基础知识. 使用open方法操作文件可以分三步走,一是打开文件,二是操作文件,三是关闭文件.下面分 ...

  6. PHP去除BOM头的方法

    BOM头是UTF-8来告诉编辑器:我是UTF8编码.它的编码是\xEF\xBB\xBF 但是PHP在设计之初并没有考虑到BOM头的问题,所以在编解码的时候很容易出现问题   比如今天遇到的问题,jso ...

  7. 安装DRBD的一些问题

    安装DRBD,建议用源代码包先生成rpm包来安装,不要用直接download的rpm包,有可能会用不了,因为这跟系统内核版本有关系,在2.6.33版本以前内核没有集成drbd,   A.先安装一些其它 ...

  8. [JS] JavaScript由浅入深(1) 基本特性

    1.全局变量的特性: 在函数体内直接写的变量(未用var标志)自动升级为全局变量. (function func() { i = 100; }()); alert(i); 非常不建议不写var. va ...

  9. <转>——网络爬虫

    网络蜘蛛即Web Spider,是一个很形象的名字.把互联网比喻成一个蜘蛛网,那么Spider就是在网上爬来爬去的蜘蛛.网络蜘蛛是通过网页的链接地址来寻找网页,从 网站某一个页面(通常是首页)开始,读 ...

  10. SQL Server中的连接查询【内连接,左连接,右连接,。。。】

    在查询多个表时,我们经常会用“连接查询”.连接是关系数据库模型的主要特点,也是它区别于其它类型数据库管理系统的一个标志. 什么是连接查询呢? 概念:根据两个表或多个表的列之间的关系,从这些表中查询数据 ...