`
huangqinqin
  • 浏览: 360362 次
  • 性别: Icon_minigender_2
  • 来自: 福州
社区版块
存档分类
最新评论

Adnroid 异步加载网络图片

 
阅读更多
ApkAsyncTask.java

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.view.View;
import android.view.View.OnClickListener;

/**
* AsyncTask中
* 第一个参数Apknfo和doInBackground(....)中的参数保持一致
* 第二个参数Bitmap和onProgressUpdate(...)中的参数保持一致,由publishProgress()传递该值
* 第三个参数Apknfo和onPostExecute(....)中的参数保持一致,也是doInBackground(....)返回值类型
* doInBackground(....)的返回值传给onPostExecute(....)执行,也即是onPostExecute(....)的参数
* @author huangqin
*
*/
public class ApkAsyncTask extends AsyncTask<ApkInfo, Integer, ApkValue>{

private ViewHolder mHolder;
private ApkValue mApkValue;

private Context mContext;
private ApkInfo mApkInfo;

public ApkAsyncTask(Context context, ViewHolder holder) {
this.mContext = context;
mHolder = holder;
mApkValue = new ApkValue();
}

@Override
protected void onPreExecute() {

super.onPreExecute();
}

@Override
protected ApkValue doInBackground(ApkInfo... params) {
mApkInfo = params[0];
mApkValue.setApkPic(resolverApkPic(mApkInfo.getApkItemPicUrl())); // download picture from internet
mApkValue.setApkName(mApkInfo.getApkItemName());
mApkValue.setApkFile(mApkInfo.getApkFileUrl());
//publishProgress(mBitmap);

return mApkValue;
}

@Override
protected void onPostExecute(ApkValue result) {
// refresh UI
mHolder.contentItemPic.setImageBitmap(result.getApkPic());
mHolder.contentItemName.setText(result.getApkName());
/*mHolder.contentItemDownload.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {


}
});*/
super.onPostExecute(result);
}

@Override
protected void onProgressUpdate(Integer... values) {
super.onProgressUpdate(values);
}

@Override
protected void onCancelled() {

super.onCancelled();
}

    private Bitmap resolverApkPic (String apkPicUrl) {   
URL tmpURL;
Bitmap bmap = null;
// from http service
    try {
    tmpURL = new URL(apkPicUrl);
    HttpURLConnection conn = (HttpURLConnection) tmpURL.openConnection();
    conn.connect();  
    InputStream is = conn.getInputStream();
    bmap = BitmapFactory.decodeStream(is);
    is.close();
    } catch (IOException e) {
    e.printStackTrace();
    }

// from sdcard
/*bmap = BitmapFactory.decodeFile(apkPicUrl);

int apkPicWidth = (int)(mWinWidth * 0.25);
int apkPicHeight = (int)(mWinHeight * 0.11);
bmap.createScaledBitmap(bmap, apkPicWidth, apkPicHeight, true);*/

    if(bmap==null)
    bmap=BitmapFactory.decodeResource(mContext.getResources(), R.drawable.loading);
   
return bmap;   
    }  

}


ViewHolder.java
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.TextView;

public class ViewHolder {
ImageView contentItemPic;
TextView contentItemName;
ImageButton contentItemDownload;
}


ApkValue.java
import android.graphics.Bitmap;

public class ApkValue {

private Bitmap mApkPic;
private String mApkName;
private String mApkFile;

public ApkValue() {

}

public Bitmap getApkPic() {
return mApkPic;
}

public void setApkPic(Bitmap bitmap) {
mApkPic = bitmap;
}

public String getApkName() {
return mApkName;
}

public void setApkName(String name) {
mApkName = name;
}

public String getApkFile() {
return mApkFile;
}

public void setApkFile(String fileUrl) {
mApkFile = fileUrl;
}
}



在UI界面初始化ApkAsyncTask,并执行execute方法。如下:
ApkAsyncTask mApkAsyncTask = null;
ViewHolder mHolder = new ViewHolder();
private ApkInfo mApkInfo = null; // A apk
private ArrayList<ApkInfo> mApkInfoList = null; // The total apks

mHolder = (ViewHolder)convertView.getTag();
mApkInfo = mApkInfoList.get(position);
mApkAsyncTask = new ApkAsyncTask(mContext, mHolder);
mApkAsyncTask.execute(mApkInfo);

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics