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

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. [fun code - 模拟]孤独的“7”

    今天看到朋友圈里有人发了一张孤独的7的题目,第一反应就是模拟后计算出结果,而女朋友则更爱推理,手算.

  2. joomla3.1安装不通过Magic Quotes GPC解决方法

    测试安装下joomla 3.1稳定版,但是不能成功,Magic Quotes GPC始终显示 否红色,这样就安装不了了! 要解决这个很简单,开启Magic Quotes GPC就行了,于是找到php. ...

  3. 解决debian中脚本无法使用source的问题

    #!/bin/sh source scripts/common.sh 现象: shell脚本中source aaa.sh时提示 source: not found 原因: ls -l `which s ...

  4. EPANET中读取INPUT文件的函数文件——INPUT3.C

    /* ********************************************************************** INPUT3.C -- Input data par ...

  5. [团队项目]expat不兼容BUG

    本周五软工团队项目的第一次前后端全部对接时,出了一个蛋疼的错误. 最初起因是小丽叔出于安全的考虑,使用守护进程来跑Web服务器.守护进程(Daemon)是运行在后台的一种特殊进程,如果服务器用root ...

  6. [ORM] Entity Framework(1) CodeFirst快速入门

    Entity Framework 是微软以 ADO.NET 为基础所发展出来的对象关系对应 (O/R Mapping) 解决方案 对象关系映射(英语:Object Relational Mapping ...

  7. struts2基础——请求与响应、获取web资源

    一.请求与响应 Action1.含义:(1) struts.xml 中的 action 元素,也指 from 表单的 action 属性,总之代表一个 struts2 请求.(2) 用于处理 Stru ...

  8. 用C#编程的建议

    1.如果可能尽量使用接口来编程       .NET框架包括类和接口,在编写程序的时候,你可能知道正在用.NET的哪个类.然而,在这种情况下如果你用.NET支持的接口而不是它的类来编程时,代码会变得更 ...

  9. [CLR via C#]18. Attribute

    attribute可以说是Microsoft .NET Framework提出的最具创意的技术之一了.利用attribute,可以声明性的为自己的代码构造添加注解,从而实现一些特殊的功能.attrib ...

  10. 大话设计模式-->模板方法设计模式

    在学习java的过程中,我们肯定听到过设计模式这名词,在行业中有这么一句话,若您能熟练的掌握23种设计模式,那么你便是大牛! 好了,废话不多说,今天我跟大家分享一下23种设计模式之一的  模板方法 设 ...