Android实现图片下载到本地的教程
1. 整体流程
首先我们来看一下整个实现图片下载到本地的流程:
erDiagram
CUSTOMER ||--o| DOWNLOAD : 下载
DOWNLOAD ||--o| LOCAL_STORAGE : 存储到本地
2. 具体步骤
接下来我们来详细说明每一步需要做什么以及需要使用的代码:
步骤一:下载图片
// 创建一个异步任务AsyncTask用于下载图片
private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> {
protected Bitmap doInBackground(String... urls) {
String imageUrl = urls[0];
Bitmap bitmap = null;
try {
InputStream in = new java.net.URL(imageUrl).openStream();
bitmap = BitmapFactory.decodeStream(in);
} catch (Exception e) {
Log.e("Error", e.getMessage());
e.printStackTrace();
}
return bitmap;
}
}
步骤二:保存图片到本地
// 保存图片到本地
private void saveImageToStorage(Bitmap bitmap) {
String fileName = "image.jpg";
try {
// 获取图片存储路径
File storageDir = getExternalFilesDir(Environment.DIRECTORY_PICTURES);
File imageFile = new File(storageDir, fileName);
// 创建文件输出流
FileOutputStream out = new FileOutputStream(imageFile);
// 将Bitmap压缩为JPEG格式并写入文件
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, out);
out.flush();
out.close();
// 通知系统图库更新
MediaScannerConnection.scanFile(this, new String[] { imageFile.getAbsolutePath() }, null, null);
} catch (IOException e) {
e.printStackTrace();
}
}
3. 完整代码
// 引入必要的包
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Environment;
import android.os.StrictMode;
import android.util.Log;
import android.widget.ImageView;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import android.media.MediaScannerConnection;
public class MainActivity extends AppCompatActivity {
private ImageView imageView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 为了避免在主线程中进行网络请求导致的异常,需要设置StrictMode
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
imageView = findViewById(R.id.imageView);
String imageUrl = "
// 执行异步任务下载图片
new DownloadImageTask().execute(imageUrl);
}
// 创建一个异步任务AsyncTask用于下载图片
private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> {
protected Bitmap doInBackground(String... urls) {
String imageUrl = urls[0];
Bitmap bitmap = null;
try {
InputStream in = new java.net.URL(imageUrl).openStream();
bitmap = BitmapFactory.decodeStream(in);
} catch (Exception e) {
Log.e("Error", e.getMessage());
e.printStackTrace();
}
return bitmap;
}
// 下载完成后保存图片到本地
protected void onPostExecute(Bitmap bitmap) {
imageView.setImageBitmap(bitmap);
saveImageToStorage(bitmap);
}
}
// 保存图片到本地
private void saveImageToStorage(Bitmap bitmap) {
String fileName = "image.jpg";
try {
// 获取图片存储路径
File storageDir = getExternalFilesDir(Environment.DIRECTORY_PICTURES);
File imageFile = new File(storageDir, fileName);
// 创建文件输出流
FileOutputStream out = new FileOutputStream(imageFile);
// 将Bitmap压缩为JPEG格式并写入文件
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, out);
out.flush();
out.close();
// 通知系统图库更新
MediaScannerConnection.scanFile(this, new String[] { imageFile.getAbsolutePath() }, null, null);
} catch (IOException e) {
e.printStackTrace();
}
}
}
通过以上代码,你可以实现将图片从网络上下载到本地存储。希望这篇文章对你有所帮助,祝你学习进步!
















