Android-下载网上图片
Posted 原创Android 努力学习 专一安卓 持之以恒
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android-下载网上图片相关的知识,希望对你有一定的参考价值。
下载操作相关代码:
package liudeli.async; import android.app.Activity; import android.app.ProgressDialog; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.view.View; import android.widget.ImageView; import android.widget.Toast; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.URL; public class MainActivity3 extends Activity { // 图片地址 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"; // 成功标识 private final int SUCCESS = 200; // 失败标识 private final int ERROR = 404; private ImageView imageView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main3); imageView = findViewById(R.id.iv_image); } /** * 定义Handler,用于接收子线程发过来的信息 */ private Handler mHandler = new Handler(){ @Override public void handleMessage(Message msg) { super.handleMessage(msg); switch (msg.what) { case SUCCESS: imageView.setImageBitmap((Bitmap) msg.obj); break; case ERROR: Toast.makeText(MainActivity3.this, "下载失败,请检查原因", Toast.LENGTH_LONG).show(); break; } if (null != progressDialog) progressDialog.dismiss(); } }; private ProgressDialog progressDialog = null; /** * 获取图片 按钮 * @param view */ public void getImage(View view) { progressDialog = new ProgressDialog(MainActivity3.this); progressDialog.setMessage("正在下载..."); progressDialog.show(); // 开启子线程 下载图片 /** * 执行此方法才去启动线程下载 */ new Thread(new DownloadImage()).start(); } class DownloadImage implements Runnable { /** * 发送Handler */ public void showUiImage(int responseCode, Bitmap bitmap) { Message message = mHandler.obtainMessage(responseCode); // 拿系统消息池的消息, 不要 new Message(); message.obj = bitmap; mHandler.sendMessageDelayed(message, 2000); } @Override public void run() { try { // 封装成网络地址 URL url = new URL(PATH); // 打开一个连接 HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection(); // 设置连接时长 httpURLConnection.setConnectTimeout(5000); // 设置请求方式 httpURLConnection.setRequestMethod("GET"); /** * 注意:⚠️ 不要肤浅的任务 打开连接对象 设置连接时长 设置请求方式 就向服务器发送Http请求了 * 是要执行httpURLConnection.getResponseCode()才会向服务器发送Http请求 */ if (httpURLConnection.getResponseCode() == HttpURLConnection.HTTP_OK) { // 得到服务器返回过来的流对象 InputStream inputStream = httpURLConnection.getInputStream(); Bitmap bitmap = BitmapFactory.decodeStream(inputStream); showUiImage(SUCCESS, bitmap); } else { showUiImage(ERROR, null); } } catch (Exception e) { e.printStackTrace(); showUiImage(ERROR, null); } } } }
Layout:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <Button android:id="@+id/bt_get_image" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="获取图片" android:onClick="getImage" /> <ImageView android:id="@+id/iv_image" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/bt_get_image" /> </RelativeLayout>
AndroidManifest.xml 配置网络权限:
<uses-permission android:name="android.permission.INTERNET" />
以上是关于Android-下载网上图片的主要内容,如果未能解决你的问题,请参考以下文章
Android - 应用程序启动时片段 onCreate 崩溃