一个案例 用异步的方式获取内容和图片
来源:互联网 发布:愚人节整蛊软件 编辑:程序博客网 时间:2024/06/05 18:26
Mainactivity
package com.example.lixin.zonghe;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseExpandableListAdapter;
import android.widget.EditText;
import android.widget.ExpandableListView;
import android.widget.ImageView;
import android.widget.TextView;
import com.example.lixin.zonghe.Bean.FoodInfo;
import com.example.lixin.zonghe.utils.LoadImageAsyncTask;
import com.example.lixin.zonghe.utils.StreamTools;
import com.google.gson.Gson;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
private int index = 0;
private ViewPager vp;
private List<String> imgeAddress = new ArrayList<String>();
private List<FoodInfo.ResultBean.DataBean.StepsBean> steps;
private ExpandableListView exp;
private EditText et;
private FoodInfo foodInfo;
private String name;
private Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
//UI操作
switch (msg.what){
case 1:
{
//界面切换
vp.setCurrentItem(index);
}
break;
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imgeAddress.add("http://imgs.juheapi.com/health_knowledge/37f66a49e340be76df98199e29a312ff.jpg");
imgeAddress.add("http://imgs.juheapi.com/health_knowledge/7ee98f9699ff2384376a002ac0a8bdb6.jpg");
imgeAddress.add("http://imgs.juheapi.com/health_knowledge/3594118459d3a894739d7f41d5e3e732.jpg");
imgeAddress.add("http://imgs.juheapi.com/health_knowledge/8dd7c5be67a19f8f7da73dbf2cc78025.jpg");
vp = (ViewPager) findViewById(R.id.viewpager);
et = (EditText) findViewById(R.id.et_text);
exp = (ExpandableListView) findViewById(R.id.exp_list_view);
//设置适配器
vp.setAdapter(new MyPageAdapter());
//开始轮播
autoPlay();
}
class MyPageAdapter extends PagerAdapter {
@Override
public int getCount() {
return Integer.MAX_VALUE;//2的31次方减1
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view == object;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
//super.destroyItem(container, position, object);
container.removeView((View) object);
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
//产生一个条目,添加到显示容器里
final ImageView imageView = new ImageView(MainActivity.this);
new LoadImageAsyncTask(new LoadImageAsyncTask.ImageCallBackListener() {
@Override
public void imageCallBack(Bitmap bitmap) {
if(bitmap != null){
imageView.setImageBitmap(bitmap);
}else{
imageView.setImageResource(R.mipmap.ic_launcher);
}
}//position % imgeAddress.size() 这个是取模,//position ++ 2的31 减一次方为止 0,1,2
}).execute(imgeAddress.get(position % imgeAddress.size()));
//添加到container
container.addView(imageView);
return imageView;
}
}
private void autoPlay(){
new Thread(){
@Override
public void run() {
super.run();
while (true){
index++;//index++ 1 ++index 1-> 2
int index1 = index % imgeAddress.size();
try { Thread.sleep(3000);} catch (InterruptedException e) { e.printStackTrace(); }//sleep 睡觉 UI不工作了
//发送消息
handler.sendEmptyMessage(1);
}
}
}.start();
}
public void btn(View view){
name = et.getText().toString().trim();
System.out.println(name);
getMenuInfo("http://apis.juhe.cn/cook/query?key=ff196b6ac0c60459952b35982c752568&menu="+name);
}
private void getMenuInfo(String path){
new AsyncTask<String,Void,String>(){
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
if (s!=null){
Gson gson = new Gson();
foodInfo = gson.fromJson(s, FoodInfo.class);
exp.setAdapter(new MyExpandAdapter());
}else {
System.out.println("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
}
}
@Override
protected String doInBackground(String... params) {
try {
String path = params[0];
URL url = new URL(path);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.setConnectTimeout(5000);
connection.setReadTimeout(5000);
int code = connection.getResponseCode();
if (code == 200){
InputStream is = connection.getInputStream();
String json = StreamTools.readFrom(is);
System.out.println("aaaa"+json);
return json;
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}.execute(path);
}
public void loadImage(String path, final ImageView iv_image){
new AsyncTask<String,Void,Bitmap>(){
@Override
protected void onPostExecute(Bitmap bitmap) {
super.onPostExecute(bitmap);
if (bitmap!=null){
iv_image.setImageBitmap(bitmap);
}else{
iv_image.setImageResource(R.mipmap.ic_launcher);
}
}
@Override
protected Bitmap doInBackground(String... params) {
try {
String path = params[0];
URL url = new URL(path);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.setConnectTimeout(5000);
connection.setReadTimeout(5000);
int code = connection.getResponseCode();
if (code == 200){
InputStream is = connection.getInputStream();
return BitmapFactory.decodeStream(is);
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}.execute(path);
}
private class MyExpandAdapter extends BaseExpandableListAdapter{
@Override
public int getGroupCount() {
return foodInfo.getResult().getData().size();
}
@Override
public int getChildrenCount(int groupPosition) {
return foodInfo.getResult().getData().get(groupPosition).getSteps().size();
}
@Override
public Object getGroup(int groupPosition) {
return foodInfo.getResult().getData().get(groupPosition);
}
@Override
public Object getChild(int groupPosition, int childPosition) {
return foodInfo.getResult().getData().get(groupPosition).getSteps().get(childPosition);
}
@Override
public long getGroupId(int groupPosition) {
return groupPosition;
}
@Override
public long getChildId(int groupPosition, int childPosition) {
return childPosition;
}
@Override
public boolean hasStableIds() {
return false;
}
@Override
public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
if (convertView==null){
convertView = View.inflate(MainActivity.this,R.layout.group_item,null);
}
ImageView iv = (ImageView) convertView.findViewById(R.id.groupIcon);
TextView tv = (TextView) convertView.findViewById(R.id.groupTvTitle);
tv.setText(foodInfo.getResult().getData().get(groupPosition).getTitle());
loadImage(foodInfo.getResult().getData().get(groupPosition).getAlbums().get(0),iv);
return convertView;
}
@Override
public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
if (convertView==null){
convertView = View.inflate(MainActivity.this,R.layout.child_item,null);
}
ImageView iv1 = (ImageView) convertView.findViewById(R.id.childIcon);
TextView tv1 = (TextView) convertView.findViewById(R.id.childTvTitle);
tv1.setText(foodInfo.getResult().getData().get(groupPosition).getSteps().get(childPosition).getStep());
loadImage(foodInfo.getResult().getData().get(groupPosition).getSteps().get(childPosition).getImg(),iv1);
return convertView;
}
@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
return false;
}
}
}
LoadImageAsyncTask 获取图片
package com.example.lixin.zonghe.utils;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
/**
* Created by hua on 2017/7/12.
*/
public class LoadImageAsyncTask extends AsyncTask<String,Void,Bitmap> {
public interface ImageCallBackListener{
void imageCallBack(Bitmap bitmap);
}
public LoadImageAsyncTask(ImageCallBackListener imageCallBackListener){
this.imageCallBackListener = imageCallBackListener;
}
private ImageCallBackListener imageCallBackListener;
@Override
protected void onPostExecute(Bitmap bitmap) {
super.onPostExecute(bitmap);
imageCallBackListener.imageCallBack(bitmap);
}
@Override
protected Bitmap doInBackground(String... params) {
try {
String path = params[0];
URL url = new URL(path);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.setConnectTimeout(5000);
connection.setReadTimeout(5000);
int code = connection.getResponseCode();
if (code == 200){
InputStream is = connection.getInputStream();
return BitmapFactory.decodeStream(is);
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
工具类 StreamTools
package com.example.lixin.zonghe.utils;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
/**
* Created by hua on 2017/7/13.
*/
public class StreamTools {
public static String readFrom(InputStream is)throws Exception{
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len = 0;
while((len = is.read(buffer))!=-1){
baos.write(buffer,0,len);
}
is.close();
baos.close();
return baos.toString();
}
}
- 一个案例 用异步的方式获取内容和图片
- 异步操作的一个小案例,在h1中加入一个文本内容(GET请求)
- 图片异步加载和图片缓存的两种方式
- 异步加载数据和图片综合案例
- AsyncTask的案例 异步下载图片
- table单元格内容ajax.get方式异步获取
- 关于获取设备内容的几种方式和区别
- 如何用安卓中异步从网上获取图片内容
- 多线程的同步和异步讲解案例
- 异步的方式查看网络图片
- 图片的两种异步下载方式
- ListView的常见优化:获取网络图片异步加载,分批加载,分页显示,图片缓存等优化方式
- ListView的常见优化:获取网络图片异步加载,分批加载,分页显示,图片缓存等优化方式
- ListView的常见优化:获取网络图片异步加载,分批加载,分页显示,图片缓存等优化方式
- 一个在ListView上异步双缓存获取图片的实现
- 关于异步加载获取网络图片的
- httpclient 用java调用 的方式获取网页内容,
- 本地获取图片的几种常用方式和网络获取图片
- 实现背景颜色随着ScrollView滑动改变的ActionBar
- python list的一些特性
- 巧用郑州SEO九个小技巧 提高网站流量
- Java_基础—集合框架(练习)
- 逆置/反转单链表+查找单链表的倒数第k个节点
- 一个案例 用异步的方式获取内容和图片
- Codeforces346B Lucky Common Subsequence(KMP+dp)
- 自定义windows登录认证(微软 Credential Providers 详解一《调用原理》)
- 信源编码(六)h264 jm源码简析
- Professional JS(6.3.2-7.2.0)借用构造函数/原型式继承/(寄生)(组合)式继承/递归/闭包
- Go语言学习网站
- 【STL】queue用法
- 算法:实现四舍五入的小技巧
- 子类构造方法与父类构造方法在调用时的联系