AsyncTask的案例 异步下载图片

来源:互联网 发布:js 24小时时间插件 编辑:程序博客网 时间:2024/05/01 19:29

工具类

package com.itcast.douban.util;import java.io.InputStream;import java.net.HttpURLConnection;import java.net.URL;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.os.AsyncTask;/** * 1.图片下载路径的url 2.下载进度 不显示 Void 3.异步任务执行完毕后的返回值 *  */public class LoadImageAsynTask extends AsyncTask<String, Void, Bitmap> {public LoadImageAsynTaskCallBack callback;public LoadImageAsynTask(LoadImageAsynTaskCallBack callback){this.callback = callback;}public interface LoadImageAsynTaskCallBack{public void beforeLoadImage();public void afterLoadImage(Bitmap bitmap);}/** * 当异步任务执行之前调用 */@Overrideprotected void onPreExecute() {//初始化的操作具体怎么去实现 ,LoadImageAsynTask不知道//需要让调用这个LoadImageAsynTask 的人去实现callback.beforeLoadImage();super.onPreExecute();}/** * 异步任务执行之后调用 */@Overrideprotected void onPostExecute(Bitmap result) {// TODO Auto-generated method stubcallback.afterLoadImage(result);super.onPostExecute(result);}/** * 后台任务执行的异步任务 * String... params 可变长度的参数 */@Overrideprotected Bitmap doInBackground(String... params) {try{String path = params[0];URL url = new URL(path);HttpURLConnection conn = (HttpURLConnection) url.openConnection();InputStream is = conn.getInputStream();Bitmap bitmap = BitmapFactory.decodeStream(is);return bitmap;}catch(Exception e){e.printStackTrace();return null;}}}


 

package com.itcast.douban;import android.graphics.Bitmap;import android.os.AsyncTask;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.ImageButton;import android.widget.ImageView;import android.widget.RelativeLayout;import android.widget.TextView;import com.google.gdata.data.Link;import com.google.gdata.data.TextContent;import com.google.gdata.data.douban.UserEntry;import com.itcast.douban.util.LoadImageAsynTask;import com.itcast.douban.util.LoadImageAsynTask.LoadImageAsynTaskCallBack;public class MyInfoActivity extends BaseActvity implements OnClickListener {private TextView tv_name;private TextView tv_location;private TextView tv_info;private ImageView iv_icon;private String name ;private String location;private String content ;private String iconurl;@Overrideprotected void onCreate(Bundle savedInstanceState) {//保证首先设置contentView 然后在去调用父类的方法setContentView(R.layout.my_info);super.onCreate(savedInstanceState);}@Overridepublic void setupView() {tv_name = (TextView) this.findViewById(R.id.txtUserName);tv_location = (TextView) this.findViewById(R.id.txtUserAddress);tv_info = (TextView) this.findViewById(R.id.txtUserDescription);mRelativeLayoutLoding = (RelativeLayout) this.findViewById(R.id.loading);mTextViewTitle = (TextView) this.findViewById(R.id.myTitle);mImageBack = (ImageButton)this.findViewById(R.id.back_button);iv_icon = (ImageView)this.findViewById(R.id.imgUser);}@Overridepublic void setListener() {mImageBack.setOnClickListener(this);}@Overridepublic void fillData() {showLoading();/** * 实现一个异步的任务 */new AsyncTask<Void,Void,Void>() {/** * onPreExcute 在异步任务执行之前调用的方法 * 运行在主线程里面的  可以做一些初始化UI的操作 */@Overrideprotected void onPreExecute() {showLoading();super.onPreExecute();}/** * 在异步任(后台任务)执行之后调用的方法 * 运行在ui线程中 */@Overrideprotected void onPostExecute(Void result) {hideLoading();super.onPostExecute(result);tv_info.setText(content);tv_location.setText(location);tv_name.setText(name);//设置用户的头像LoadImageAsynTask task = new LoadImageAsynTask(new LoadImageAsynTaskCallBack() {@Overridepublic void beforeLoadImage() {//加载前的默认图标iv_icon.setImageResource(R.drawable.ic_launcher);}@Overridepublic void afterLoadImage(Bitmap bitmap) {if(null != bitmap){iv_icon.setImageBitmap(bitmap);}else{iv_icon.setImageResource(R.drawable.ic_launcher);}}});task.execute(iconurl);}/** * 后台执行的任务 * 运行在一个子线程当中 */@Overrideprotected Void doInBackground(Void... params) {try{//执行耗时的操作UserEntry ue = doubanservice.getAuthorizedUser();name = ue.getTitle().getPlainText();location = ue.getLocation();content = ((TextContent)ue.getContent()).getContent().getPlainText();for(Link link:ue.getLinks()){if("icon".equals(link.getRel())){iconurl = link.getHref();}}}catch(Exception e){e.printStackTrace();}return null;}}.execute();}@Overridepublic void onClick(View view) {switch (view.getId()) {case R.id.back_button:finish();break;}}}


 

package com.itcast.douban;import android.app.Activity;import android.content.Context;import android.content.SharedPreferences;import android.os.Bundle;import android.view.View;import android.view.animation.AlphaAnimation;import android.view.animation.AnimationSet;import android.view.animation.ScaleAnimation;import android.widget.ImageButton;import android.widget.RelativeLayout;import android.widget.TextView;import com.google.gdata.client.douban.DoubanService;public abstract class BaseActvity extends Activity {public TextView mTextViewTitle;public RelativeLayout mRelativeLayoutLoding;public DoubanService doubanservice;public ImageButton mImageBack;public abstract void setupView();public abstract void setListener();public abstract void fillData();public  void showLoading(){mRelativeLayoutLoding.setVisibility(View.VISIBLE);AlphaAnimation aa = new AlphaAnimation(0.0f,1.0f);aa.setDuration(1000);ScaleAnimation sa = new ScaleAnimation(0.0f,1.0f,0.0f,1.0f);sa.setDuration(1000);AnimationSet set = new AnimationSet(false);set.addAnimation(aa);set.addAnimation(sa);mRelativeLayoutLoding.setAnimation(set);mRelativeLayoutLoding.startAnimation(set);}public  void hideLoading(){AlphaAnimation aa = new AlphaAnimation(1.0f,0.0f);aa.setDuration(1000);ScaleAnimation sa = new ScaleAnimation(1.0f,0.0f,1.0f,0.0f);sa.setDuration(1000);AnimationSet set = new AnimationSet(false);set.addAnimation(aa);set.addAnimation(sa);mRelativeLayoutLoding.setAnimation(set);mRelativeLayoutLoding.startAnimation(set);mRelativeLayoutLoding.setVisibility(View.INVISIBLE);}@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);String apiKey = "0c51c1ba21ad8cfd24f5452e6508a6f7";String secret = "359e16e5e5c62b6e";doubanservice = new DoubanService("黑马小瓣瓣", apiKey,secret);//密钥设置给myServiceSharedPreferences sp = getSharedPreferences("config", Context.MODE_PRIVATE);String accesstoken = sp.getString("accesstoken", "");String tokensecret = sp.getString("tokensecret", "");doubanservice.setAccessToken(accesstoken, tokensecret);setupView();setListener();fillData();}}


 

0 0
原创粉丝点击