packageliudeli.async.okhttp2;importandroid.app.Activity;importandroid.app.ProgressDialog;importandroid.graphics.Bitmap;importandroid.graphics.BitmapFactory;importandroid.os.Bundle;importandroid.os.Handler;importandroid.view.View;importandroid.widget.Button;importandroid.widget.ImageView;importandroid.widget.Toast;importjava.io.IOException;importjava.io.InputStream;importliudeli.async.R;importokhttp3.Call;importokhttp3.Callback;importokhttp3.OkHttpClient;importokhttp3.Request;importokhttp3.Response;public class MainActivity extendsActivity {private final static String TAG = MainActivity.class.getSimpleName();//图片地址
private final String PATH = "https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000" +
"&sec=1544714792699&di=3c2de372608ed6323f583f1c1b445e51&imgtype=0&src=http%3A%2F%2Fp" +
"2.qhimgs4.com%2Ft0105d27180a686e91f.jpg";privateImageView imageView;privateButton bt_set_wallpaper;privateProgressDialog progressDialog;
@Overrideprotected voidonCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main4);
imageView=findViewById(R.id.iv_image);
bt_set_wallpaper=findViewById(R.id.bt_set_wallpaper);
Button bt_get_image=findViewById(R.id.bt_get_image);
bt_get_image.setOnClickListener(newView.OnClickListener() {
@Overridepublic voidonClick(View v) {//弹出进度条
progressDialog = new ProgressDialog(MainActivity.this);
progressDialog.setMessage("Download ...");
progressDialog.show();/*** 第一种方式下载图片 普通*/
/*new Thread(){
@Override
public void run() {
super.run();
downloadImage1();
}
}.start();*/
/*** 第二种方式下载图片 异步*/downloadImage2();
}
});
bt_set_wallpaper.setOnClickListener(newView.OnClickListener() {
@Overridepublic voidonClick(View v) {if (null !=bitmap) {try{
setWallpaper(bitmap);
Toast.makeText(MainActivity.this, "壁纸设置成功", Toast.LENGTH_LONG).show();
}catch(IOException e) {
e.printStackTrace();
Toast.makeText(MainActivity.this, "壁纸设置失败", Toast.LENGTH_LONG).show();
}
}
}
});
}privateBitmap bitmap;/*** 第一种方式
* 使用okhttp 普通下载图片*/
private voiddownloadImage1() {
OkHttpClient client= newOkHttpClient();
Request request= newRequest.Builder()
.url(PATH)
.build();try{
Response response=client.newCall(request).execute();
InputStream inputStream=response.body().byteStream();if (200 ==response.code()) {
Bitmap bitmap=BitmapFactory.decodeStream(inputStream);
showUI(bitmap);
}else{
showUI(null);
}
}catch(IOException e) {
e.printStackTrace();
showUI(null);
}
}/*** 第二种方式
* 使用okhttp 异步下载图片*/
private voiddownloadImage2() {
OkHttpClient client= newOkHttpClient();
Request request= newRequest.Builder()
.url(PATH)
.build();try{
Call call= client.newCall(request); //使用client去请求
call.enqueue(new Callback() { //回调方法,>>> 可以获得请求结果信息
@Overridepublic voidonFailure(Call call, IOException e) {
showUI(null); //下载失败,更新UI
}
@Overridepublic void onResponse(Call call, Response response) throwsIOException {
InputStream inputStream=response.body().byteStream();if (200 ==response.code()) {
Bitmap bitmap=BitmapFactory.decodeStream(inputStream);
showUI(bitmap);
}else{
showUI(null);
}
}
});
}catch(Exception e) {
e.printStackTrace();
showUI(null);
}
}/*** 显示UI 此方法是可以在 主线程 子线程 对UI操作显示的哦
*@parambitmap*/
private void showUI(finalBitmap bitmap) {this.bitmap =bitmap;
runOnUiThread(runnable);
}
Runnable runnable= newRunnable() {
@Overridepublic voidrun() {if (bitmap != null) {//故意放慢两秒,模仿网络差的效果
new Handler().postDelayed(newRunnable() {
@Overridepublic voidrun() {//设置从网上下载的图片
imageView.setImageBitmap(bitmap);//设置为可以点击
bt_set_wallpaper.setEnabled(true);//关闭进度条
progressDialog.dismiss();
Toast.makeText(MainActivity.this, "下载成功", Toast.LENGTH_SHORT).show();
}
},2000);
}else { //失败
bt_set_wallpaper.setEnabled(false);
Toast.makeText(MainActivity.this, "下载失败,请检查原因", Toast.LENGTH_LONG).show();//关闭进度条
progressDialog.dismiss();
}
}
};
}