下面是一个间单的示例,关于如何在 Android 中从网络获取图片并将其存储到本地:
首先,需要在AndroidManifest.xml文件中添加以下权限:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
然后,你可以使用如下代码来获取网络图片并存储到本地:
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Environment;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
new Thread(new Runnable() {
@Override
public void run() {
getPicture("http://your-image-url-here");
}
}).start();
}
public static void getPicture(String url) {
try {
URL imageUrl = new URL(url);
HttpURLConnection conn = (HttpURLConnection) imageUrl.openConnection();
conn.setConnectTimeout(6000);
conn.setDoInput(true);
conn.setUseCaches(false);
conn.connect();
InputStream is = conn.getInputStream();
Bitmap bitmap = BitmapFactory.decodeStream(is);
saveImageToGallery(MainActivity.this, bitmap);
is.close();
} catch (Exception e) {
e.printStackTrace();
}
}
public static boolean saveImageToGallery(Context context, Bitmap bmp) {
// 首先保存图片
File appDir = new File(Environment.getExternalStorageDirectory(), "your-folder-name");
if (!appDir.exists()) {
appDir.mkdir();
}
String fileName = System.currentTimeMillis() + ".jpg";
File file = new File(appDir, fileName);
try {
FileOutputStream fos = new FileOutputStream(file);
//通过io流的方式来压缩保存图片
boolean isSuccess = bmp.compress(Bitmap.CompressFormat.JPEG, 60, fos);
fos.flush();
fos.close();
//把文件插入到系统图库
MediaStore.Images.Media.insertImage(context.getContentResolver(), file.getAbsolutePath(), fileName, null);
//保存图片后发送广播通知更新数据库
Uri uri = Uri.fromFile(file);
context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, uri));
if (isSuccess) {
return true;
} else {
return false;
}
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
}
注意,这个示例中的URL是一个示例,你需要替换成你的实际图片URL。
这个示例会创建一个新的线程去获取和保存图片,以避免在主线程中进行网络和I/O操作,这可能会阻塞UI并导致ANR错误。
这是一个在Android中从网络获取图片并存储到本地磁盘的基本步骤。在这个过程中,需要使用到Android的网络请求、文件I/O流和异步任务处理等知识。
下面提供一个示例代码来实现这个需求:
public class DownloadImage {
private Context context;
public DownloadImage(Context context) {
this.context = context;
}
public void download(final String imageUrl, final String imageName){
new AsyncTask<Void, Void, Void>(){
@Override
protected Void doInBackground(Void... voids) {
InputStream inputStream = null;
try {
URL url = new URL(imageUrl);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.setDoInput(true);
connection.connect();
if(connection.getResponseCode() == 200){
inputStream = connection.getInputStream();
Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
saveImageToGallery(context,bitmap,imageName);
}
} catch (Exception e) {
e.printStackTrace();
}finally {
try {
if(inputStream != null){
inputStream.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
return null;
}
}.execute();
}
public void saveImageToGallery(Context context, Bitmap bitmap, String fileName){
File file = new File(Environment.getExternalStorageDirectory(), fileName+".png");
try {
FileOutputStream out = new FileOutputStream(file);
bitmap.compress(Bitmap.CompressFormat.PNG, 100, out);
out.flush();
out.close();
// Update the system gallery
Intent scannerIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
Uri contentUri = Uri.fromFile(file);
scannerIntent.setData(contentUri);
context.sendBroadcast(scannerIntent);
} catch (Exception e) {
e.printStackTrace();
}
}
}
藉助这段代码,你可以在需要下载图片并存储到本地的地方调用 download()
方法即可。
注意,这段代码需要 INTERNET
和 WRITE_EXTERNAL_STORAGE
权限,在使用前需要在 Manifest 文件中声明。
你可以在你的Activity中这样来调用:
String imageUrl = "http://example.com/example.png";
String imageName = "testImage";
new DownloadImage(this).download(imageUrl, imageName);
发布者:luotuoemo,转转请注明出处:https://www.jintuiyun.com/161325.html