网络请求图片和json解析,在listView中展示出来
来源:互联网 发布:jsonp跨域原理 java 编辑:程序博客网 时间:2024/05/22 02:28
package com.example.weekone;import java.io.ByteArrayOutputStream;import java.io.InputStream;import java.net.HttpURLConnection;import java.net.URL;import android.app.Activity;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.os.AsyncTask;import android.os.Bundle;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.ImageView;import android.widget.ListView;import android.widget.TextView;import com.example.weekone.bean.NewsData;import com.google.gson.Gson;/** * 1、创建一个ListView控件 使用4 个步骤显示基本数据 * 2、在initData方法中 使用HttpUrlConnetion把地址中的Json字符串请求回来 * 3、把Json字符串解析成NewsData数据类型 * 4、在Adapter中的getView方法中 把NewsData中的标题和描述 先显示在控件 * 5、因为NewsData中还保存了每一个条目的 图片地址 * 6、getView方法中使用网络请求把每一个图片请求回来 * 7、图片回来后,使用OnUIThread方法把图片资源加载在ImageView控件上 * @author Administrator * */public class MainActivity extends Activity {ListView lv;NewsData nb;MyAdapter adapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //1、创建一个ListView控件 使用4 个步骤显示基本数据 lv = (ListView) findViewById(R.id.lv); initData(); adapter = new MyAdapter(); lv.setAdapter(adapter); } //创建适配器 class MyAdapter extends BaseAdapter{@Overridepublic int getCount() {// TODO Auto-generated method stubif(nb != null){return nb.getData().size();}return 0;}@Overridepublic Object getItem(int position) {// TODO Auto-generated method stubreturn null;}@Overridepublic long getItemId(int position) {// TODO Auto-generated method stubreturn 0;}@Overridepublic View getView(final int position, View convertView, ViewGroup parent) {final ViewHolder holder ;if(convertView == null){convertView = View.inflate(MainActivity.this, R.layout.list_item, null);holder = new ViewHolder();holder.iv = (ImageView) convertView.findViewById(R.id.iv);holder.tv_title = (TextView) convertView.findViewById(R.id.tv_title);holder.tv_summary = (TextView) convertView.findViewById(R.id.tv_summary);convertView.setTag(holder);}else{holder = (ViewHolder) convertView.getTag();}holder.tv_title.setText(nb.getData().get(position).getNews_title());holder.tv_summary.setText(nb.getData().get(position).getNews_summary());//6、getView方法中使用网络请求把每一个图片请求回来//使用一个线程把 图片加载回来 new Thread(new Runnable() {@Overridepublic void run() {//5、因为NewsData中还保存了每一个条目的 图片地址final Bitmap img = getImg(nb.getData().get(position).getPic_url());//7、图片回来后,使用OnUIThread方法把图片资源加载在ImageView控件上runOnUiThread(new Runnable() {public void run() {holder.iv.setImageBitmap(img);}});}}){}.start();return convertView;} } //listview优化的holder static class ViewHolder{ TextView tv_title; TextView tv_summary; ImageView iv; } protected Bitmap getImg(String path) { Bitmap bit = null;try {URL url = new URL(path);HttpURLConnection connection = (HttpURLConnection) url.openConnection();//默认是get请求 如果想使用post必须指明connection.setRequestMethod("GET");connection.setReadTimeout(5000);connection.setConnectTimeout(5000);int code = connection.getResponseCode();if(code == 200){InputStream inputStream = connection.getInputStream();//因为该地址是一个图片的地址,所以返回的数据流就是一个图片的数据流//直接用该图片的数据流 转换成 一个Bitmapbit = BitmapFactory.decodeStream(inputStream);}} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}return bit;} /** * 使用Http请求把json请求回来 * 使用Gson把数据装换成NewsData类型 */private void initData() {new AsyncTask<String, String, String>(){@Overrideprotected String doInBackground(String... params) {//2、在initData方法中 使用HttpUrlConnetion把地址中的Json字符串请求回来String result = getData();return result;}@Overrideprotected void onPostExecute(String result) {//3、把Json字符串解析成NewsData数据类型Gson gson = new Gson();//然后把json数据使用Gson转换成NewsDatanb = gson.fromJson(result, NewsData.class);//4、在Adapter中的getView方法中 把NewsData中的标题和描述 先显示在控件//改变数据后 刷新adapteradapter.notifyDataSetChanged();super.onPostExecute(result);}}.execute();}protected String getData() {String result = "";try {URL url = new URL("http://api.expoon.com/AppNews/getNewsList/type/1/p/1");HttpURLConnection conn = (HttpURLConnection) url.openConnection();conn.setRequestMethod("GET");int code = conn.getResponseCode();if(code == 200){InputStream is = conn.getInputStream();//把数据流中的json数据 转换成字符串ByteArrayOutputStream bos = new ByteArrayOutputStream();int len = -1;byte[] buff = new byte[1024];while((len = is.read(buff)) != -1){bos.write(buff, 0, len);}result = new String(bos.toByteArray());}} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}return result;}}
阅读全文
0 0
- 网络请求图片和json解析,在listView中展示出来
- 使用ImageLoader获取图片,使用异步在网上请求json,然后解析,在listview中显示出来
- 网络请求Json解析显示在listview
- ListView多条目展示 请求网络数据 和图片
- Json解析网络数据+listview展示跳转
- 网络请求和JSON解析
- 网络请求和JSON解析
- 网络请求和JSON解析
- 使用ListView和AsyncTask、fastjson解析Json以及适配器BaseAdapter来实现下载网络的图片以及文字并显示出来
- 解析网络json数据并展示到ListView上
- 使用glide图片加载框架将网络图片展示并在listview中
- 网络请求展示到listview
- 联网获取json数据,进行解析,并使用listview展示出来
- 请求网络数据,解析JSON,显示在listview上(采用thread,handler)
- ListView展示 网络请求的数据, 并LoaderImage请求网络图片
- C#中解析json以及网络请求
- android结合异步任务,动态加载图片,Json解析数据展示在ListView,并且实现按日期分类展示,借口回调
- iOS 网络数据请求和Json 解析
- 理解函数原型的作用
- J
- c++知识总结(4)
- Js_Dom(5)__Dom基础<事件event>
- 双亲委派模型和自定义类加载器
- 网络请求图片和json解析,在listView中展示出来
- HDU 6085 Rikka with Candies (暴力压位)
- LintCode 翻转链表
- ssh+jbpm整合
- 在eclipse搭建maven项目
- PHP使用PDO抽象层获取查询结果
- 生成awr报告和手动生成awr快照
- 带边框的背景色
- TensorFlow学习笔记----TF生成数据的方法