AsyncTask获取网络图片

我后期做学校教务系统android版的网络优化,想到用AsyncTask获取学生头像,初期,我是直接在Main中在主线程用new Thread,然后在里面添加任务获取,但是有点不好的地方是,没有进度条。因此我用了AsyncTask。

总结:输出结果可以不只是字符串,只需要在继承AsyncTask时声明就行

        
public class touxiang extends Activity {

    private Button button2;
    private ProgressBar progressBar;
    private ImageView touxiang;
    private MTask mTask;
    private static final String ACTIVITY_TAG = "LogDemo";
    private URL url = null;
    String True_Cookie = null;

    String touxiang_Url = "http://jw.jc.nuaa.edu.cn/Manager/Module/NetEa/Controls/ImageHandler.ashx?ImageName=";

    String xuehao;

    String touxiang_Url2 = "&KeyWord=00&BinaryType=SchoolRoll&SaveType=Disk&ImageFilePath=";
    byte[] data;

    @Override

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_touxiang);

        touxiang = (ImageView) findViewById(R.id.touxiang_im);
        progressBar = (ProgressBar) findViewById(R.id.Pro);
        Intent intent = getIntent();
        True_Cookie = intent.getStringExtra("True_Cookie");
        xuehao = intent.getStringExtra("xuehao");
        mTask = new MTask();//获取图片数据
        mTask.execute(touxiang_Url + xuehao + touxiang_Url2);
    }


        //第一个字符串是网络地址,第二个是用于进度条由于我简化了就没用,第三个是完成后的输出结果,我用的字节数组。
        public class MTask extends AsyncTask<String, Integer, byte[]> {


        @Override
        protected void onPreExecute() {
            Log.v(ACTIVITY_TAG, "onPreExecute");
        }

        @Override
        protected void onPostExecute(byte[] result) {
            Log.i(ACTIVITY_TAG, "onPostExecute"+result);
            progressBar.setVisibility(View.GONE);      //这是我进度的图片,加载完后隐藏
            Bitmap bitmap = BitmapFactory.decodeByteArray(result, 0, result.length);
            touxiang.setImageBitmap(bitmap);//显示图片
        }

        
        @Override
        protected byte[] doInBackground(String... strings) {
<span style="white-space:pre">	</span>    //由于学校教务网是需要Cookie才能访问图片,因此稍微麻烦点,需要把数据包打包然后获得返回数据
            try {
                byte b[] = null;
                URL url = new URL(strings[0]);
                HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
                urlConnection.setRequestMethod("GET");
                urlConnection.setConnectTimeout(10 * 1000);
                urlConnection.setRequestProperty("User-Agent", "Mozilla/5.0 (MSIE 9.0; Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko");
                urlConnection.setRequestProperty("Connection", "Keep-Alive");
                urlConnection.setRequestProperty("Cookie", True_Cookie);
                Log.v(ACTIVITY_TAG, "touxiang-----" + urlConnection.getResponseCode());
                if (urlConnection.getResponseCode()== 200) {

                    InputStream inputStream = urlConnection.getInputStream();
                    b = StreamTool(inputStream);
                    inputStream.close();
                }
                return b;
            } catch (Exception e) {
                e.printStackTrace();
            }
            return null;
        }
    }

    public byte[] StreamTool(InputStream inputStream){
        int len = -1;
        byte buf[] = new byte[1024];
        ByteArrayOutputStream out = new ByteArrayOutputStream();
        try {
            while((len=inputStream.read(buf))!=-1)
            {
                out.write(buf,0,len);
            }
            out.close();
            return out.toByteArray();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值