异步任务一:
2016-05-25 18:44
483 查看
异步任务一:
总结:
1.在UI的主线程中不能直接访问网络;
2.android sdk中删除HttpClient相关解决办法;
3.异步任务类AsyncTask使用简单说明;
源码如下:
package francis.com.asynctask; import android.app.ProgressDialog; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.net.http.HttpResponseCache; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.ImageView; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.util.EntityUtils; public class AsyncTask extends AppCompatActivity { private Button button; private ImageView imageView; private String image_path = "http://image4.it168.com/2009/9/7/3fc7d200-e741-41b9-815e-641469f9894d.jpg"; private ProgressDialog dialog; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_async_task); dialog = new ProgressDialog(this); dialog.setTitle("提示信息"); dialog.setMessage("正在下载,请稍后..."); button = (Button) findViewById(R.id.button); imageView = (ImageView) findViewById(R.id.imageView); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { new MyTask().execute(image_path); } }); } //在UI的主线程中不能直接访问网络 /** * 使用异步任务的规则:1.生命一个类继承AsyncTask标注三个参数的类型 * 2.第一个参数表示要执行的任务通常是网络的路径、第二个参数表示进度的刻度、第三个参数表示任务执行的返回结果 */ public class MyTask extends android.os.AsyncTask<String, Void, Bitmap> { //主要是完成耗时操作 @Override protected Bitmap doInBackground(String... params) { /** * 使用网络链接类HttpClient类完成对网络数据的提取 *在这里出现问题:android studio 中写代码是找不到HttpClient,经过百度解决后, * 问题原因:android6.0SDK中删除HttpClient的相关类的解决方法 ---android 6.0(api 23) SDK,不再提供org.apache.http.*(只保留几个类). * 解决方法:把jar包(org.apache.http.legacy.jar)拷贝到libs下在build.gradle中加入 dependencies { compile files('libs/org.apache.http.legacy.jar') }
参考链接:http://blog.csdn.net/yangqingqo/article/details/48214865 */
HttpClient httpClient = new DefaultHttpClient(); HttpGet httpGet = new HttpGet(params[0]); Bitmap bitmap = null; try { HttpResponse httpResponse = httpClient.execute(httpGet); if (httpResponse.getStatusLine().getStatusCode() == 200) { HttpEntity httpEntity = httpResponse.getEntity(); byte[] data = EntityUtils.toByteArray(httpEntity); bitmap = BitmapFactory .decodeByteArray(data, 0, data.length); } } catch (Exception e) { e.printStackTrace(); } return bitmap; } //表示任务执行之前 @Override protected void onPreExecute() { super.onPreExecute(); dialog.show(); } //主要是更新UI操作 @Override protected void onPostExecute(Bitmap bitmap) { super.onPostExecute(bitmap); imageView.setImageBitmap(bitmap); dialog.dismiss(); } } }
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories