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

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. VS2010打包,遇到的一些问题和解决办法

    我用的VS2010,教程很多,我就不一一介绍了,我把我自己遇到的一些问题向大家说一下: 1 可能我比较笨吧,没有理解网上很多教程的意思,直接把图片的后缀名改了,导致添加快捷方式图标的时候出现这种情况 ...

  2. [OpenCV] Image Processing - Image Elementary Knowledge

    "没有坚实的理论基础,实践只会浅尝于表面." 这是两本打基础的书,没系统学过的话,怎么好意思说自己会CV. 该领域,兴军亮 这个名字屡次出现,看来是计算机视觉领域国内的年轻才俊,向 ...

  3. LoRaWAN协议(三)--Server端数据协议

    LoRaWAN Server 端架构 LoRaWAN 的server包括 NS(Network server).AS(application server).CS(Custom server).... ...

  4. iOS-NSDate

    一.概念解释 1.什么是NSTimeZone? NSTimeZone:时区是一个地理名字,是为了克服各个地区或者国家之间在时间上的混乱设定的. 1).GMT:0:00格林威治标准时间:UTC +00: ...

  5. Spring重点—— IOC 容器中 Bean 的生命周期

    一.理解 Bean 的生命周期,对学习 Spring 的整个运行流程有极大的帮助. 二.在 IOC 容器中,Bean 的生命周期由 Spring IOC 容器进行管理. 三.在没有添加后置处理器的情况 ...

  6. Scrum团队

    5.Scrum团队成立 5.1 团队名称,团队目标.团队口号.团队照: 团队名称:@four! 团队目标:做出像“数学口袋精灵”那么棒的软件 团队口号:多劳多得 团队照: 5.2 角色分配 产品负责人 ...

  7. 后缀数组 - 求最长回文子串 + 模板题 --- ural 1297

    1297. Palindrome Time Limit: 1.0 secondMemory Limit: 16 MB The “U.S. Robots” HQ has just received a ...

  8. 重构第28 天 重命名bool方法(Rename boolean method)

    详解:本文中的”为布尔方法命名”是指如果一个方法带有大量的bool 参数时,可以根据bool 参数的数量,提取出若干个独立的方法来简化参数. 理解: 我们现在要说的重构并不是普通字面意义上的重构,它有 ...

  9. Winform开发框架之权限管理系统改进的经验总结(2)-用户选择界面的设计

    在上篇总结随笔<Winform开发框架之权限管理系统改进的经验总结(1)-TreeListLookupEdit控件的使用>介绍了权限管理模块的用户管理部分,其中主要介绍了其中的用户所属公司 ...

  10. 关于window.onload,window.onbeforeload与window.onunload

    ★  window.onload  当页面加载完毕的时候执行,即在当前页面进行其他操作之前执行.如,刚进入某个网页的弹窗提示. (  与window.onload相近的可以参考我写的另外一篇记录&qu ...