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

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. WPF中模板选择和DataContext的一些使用

    如图样: View结构 MainView(MainViewModel)|---Guide1View(Guide1ViewModel)|---Guide2View(Guide2ViewModel) |- ...

  2. C# 事件和委托

    相信大家在面试的时候会经常问到事件和委托的区别,为什么.net中需要事件和委托这样类似的问题吧,对于一些初学者来说可平时用的过程中也不知道为什么, 只知道这样用,而对于其中的实现机制不是很清楚, 所以 ...

  3. win7中的画图

    下午做一个图像篡改定位实验,在win7下对图像进行修改,然后通过其最低位判断篡改位置. 程序如何都调试不出来.反复简化程序,发现win7中的画图对图像存在优化. 当更改图像后,会自动调整当前图像的显示 ...

  4. Cwinux源码解析(一)

    我在我的个人博客发表了新的文章,欢迎各位读者批评指正. Cwinux源码解析(一)

  5. LeetCode——Gas Station

    There are N gas stations along a circular route, where the amount of gas at station i is gas[i]. You ...

  6. [数据库]sql之行顺序

    这个文章主要是防止我忘了sql的执行顺序,解释的东西我都没怎么看懂.数据库渣如我- 逻辑查询处理阶段简介 FROM:对FROM子句中的前两个表执行笛卡尔积(Cartesian product)(交叉联 ...

  7. [JS] JavaScript框架(2) D3

    D3(Data-Driven Documents)是一个用于网页作图.生成互动图形的JavaScript函数库. 官网:http://d3js.org/ 下载: cdn:<script src= ...

  8. Brute Force - B. Candy Boxes ( Codeforces Round #278 (Div. 2)

    B. Candy Boxes Problem's Link:   http://codeforces.com/contest/488/problem/B Mean: T题目意思很简单,不解释. ana ...

  9. Json的序列化和反序列化

    1.利用js进行序列化成字符串和反序列化 var personObj = {name:"Tom",age:16}; // 利用JS序列化成字符串 var personStr = J ...

  10. 百度地图js根据经纬度定位和拖动定位点

    <!DOCTYPE html><html><head> <meta http-equiv="Content-Type" content=& ...