创建新的项目,建项目完成之后,首先在AndroidMainFest.xml中配置网络访问权限——
接下来,是布局,我们提供一个简单的示范
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<ImageView
android:id="@+id/iv"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:layout_weight="1"
/>
<ProgressBar
android:visibility="invisible"
android:id="@+id/pb"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:onClick="click"
android:text="点我展示图片"
/>
</LinearLayout>
然后,就是最重要的代码块了,这里是整篇文章的重点了
public class MainActivity extends Activity {
//这里我们定义需要用到的网址,我这里使用的是本地的tomcat服务器,访问本地的图片
String path = "http://10.0.2.2:8080/ph02.jpg";
private ImageView iv;
private ProgressBar pb;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//这是查找布局中的控件
iv = (ImageView) findViewById(R.id.iv);
pb = (ProgressBar) findViewById(R.id.pb);
}
//我们在布局中定义了一个按钮方法
public void click(View v) {
/**
* 第一个参数是传给子线程的参数 一般用来传url 第二个参数是进度的参数 //integer
* 第二个参数是传给onpostExce()方法的参数
*/
new AsyncTask<String, Void, Bitmap>() {
// 一般用来做准备工作
@Override
protected void onPreExecute() {
super.onPreExecute();
pb.setVisibility(View.VISIBLE);
}
// 子线程,可以做访问网络的操作
@Override
protected Bitmap doInBackground(String... params) {
HttpClient client = new DefaultHttpClient();
HttpGet get = new HttpGet(params[0]);
try {
HttpResponse response = client.execute(get);
int statusCode = response.getStatusLine().getStatusCode();
if (statusCode == 200) {
InputStream is = response.getEntity().getContent();
final Bitmap bitmap = BitmapFactory.decodeStream(is);
return bitmap;
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
// 运行大主线程,可以做比如说更新Ui的操作
@Override
protected void onPostExecute(Bitmap result) {
super.onPostExecute(result);
iv.setImageBitmap(result);
pb.setVisibility(View.INVISIBLE);
}
}.execute(path);
}
}