Android sdcard实现图片存储 、联网下载

作者:lijiao 时间:2023-03-17 22:36:35 

本文实例介绍了sdcard存储图片下载简单操作,分享给大家供大家参考,具体内容如下

步骤 -- 在配置清单添加完联网权限后

1、res/layout界面布局


<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/imageview"

android:layout_width="wrap_content"

android:layout_height="wrap_content" />

<Button

android:id="@+id/bt_download"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="图片下载"

android:onClick="Image_Download" />

</LinearLayout>

2、有2个类一个操作SDCARD的文件工具类(FileUtil)另外一个MainActivity类

FileUtil类


//操作SDCARD的文件工具类

public class FileUtil {

private static final String CACHE_DIR = Environment.getExternalStorageDirectory() + "/my_caches/images";

private static int COMP_JPG = 0;

private static int COMP_PNG = 1;

//判断sdcard 是否挂载(是否有sdcard)

public static boolean isMounted(){

String state = Environment.getExternalStorageState();

return state.equals(Environment.MEDIA_MOUNTED);

}

//获取sdcard文件 根路径的绝对路径

public static String getSDCARD(){

return Environment.getExternalStorageDirectory().getAbsolutePath();

}

//获取文件名

public static String getFilename(String url){

return url.substring(url.lastIndexOf('/') + 1);

}

//保存文件 方法1

public static void sava1(String url,byte[] data){

//判断是否有sdcard

if(!isMounted()){

return ;

}

//有sdcard

//判断是否有缓存文件夹

File dir = new File(CACHE_DIR);

if(!dir.exists()){

//不存在缓存文件夹 创建文件夹用来保存文件

dir.mkdirs();

}

//把文件 数据存到sdcard

File file = new File(dir,getFilename(url));

try {

FileOutputStream fos = new FileOutputStream(file);

fos.write(data);

fos.close();

} catch (Exception e) {

e.printStackTrace();

}

}

//保存文件 方法2

public static void sava2(String url,Bitmap bitmap,int format){

//判断 是否有sdcard

if(!isMounted()){

return ;

}

File dir = new File(CACHE_DIR);

if(!dir.exists()){

dir.mkdirs();

}

//把 文件数据 写到 sdcard

File file = new File(dir,getFilename(url));

try {

FileOutputStream fos = new FileOutputStream(file);

//把图片文件写入缓存

bitmap.compress((format == COMP_JPG?CompressFormat.JPEG:CompressFormat.PNG), 100, fos);

fos.close();

} catch (Exception e) {

e.printStackTrace();

}

}

//读取图片

public static Bitmap readImage(String url){

if(!isMounted()){

return null;

}

File file = new File(CACHE_DIR,getFilename(url));

if(file.exists()){

return BitmapFactory.decodeFile(file.getAbsolutePath());

}

return null;

}

//清空 缓存目录

public void clearCaches(){

File dir = new File(CACHE_DIR);

File[] file_datas = dir.listFiles();

for(File file : file_datas){

file.delete();

}

}

}

MainActivity类


public class MainActivity extends Activity {

private ImageView imageview;

private String url = "http://b.hiphotos.baidu.com/image/pic/item/d1160924ab18972bf5f68cc8e0cd7b899f510ae7.jpg";

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

this.imageview = (ImageView) this.findViewById(R.id.imageview);

//设置默认图片

imageview.setImageResource(R.drawable.ic_launcher);

}

//图片下载 按钮 点击事件 监听

public void Image_Download(View view){

//判断本地是否有图片

Bitmap bitmap = FileUtil.readImage(url);

if(bitmap != null){

imageview.setImageBitmap(bitmap);

}else{

//没有图片 就发送联网请求

new MyAsyncTask().execute(url);

}

}

//联网工具类

public class MyAsyncTask extends AsyncTask<String, Void, byte[]>{

@Override

protected byte[] doInBackground(String... params) {

HttpGet get = new HttpGet(params[0]);

HttpClient client = new DefaultHttpClient();

HttpResponse response;

try {

response = client.execute(get);

if(response.getStatusLine().getStatusCode() == 200){

byte[] data = EntityUtils.toByteArray(response.getEntity());

FileUtil.sava1(params[0], data);

return data;

}

}

catch (Exception e) {

e.printStackTrace();

}

return null;

}

@Override

protected void onPostExecute(byte[] result) {

super.onPostExecute(result);

if(result != null){

Bitmap bitmap = BitmapFactory.decodeByteArray(result, 0, result.length);

imageview.setImageBitmap(bitmap);

}

}

}

}
标签:Android,sdcard,图片存储,联网下载
0
投稿

猜你喜欢

  • Java多线程 自定义线程池详情

    2022-12-02 09:22:08
  • 利用Java生成带有文字的二维码

    2022-05-21 15:01:38
  • Android自定义覆盖层控件 悬浮窗控件

    2021-10-21 01:14:40
  • SpringBoot项目找不到javax.servlet.Filter的问题及解决

    2022-03-13 10:49:18
  • 详解Mybatis的二级缓存配置

    2023-03-20 10:48:37
  • ImportBeanDefinitionRegistrar手动控制BeanDefinition创建注册详解

    2021-11-11 18:49:18
  • C#实现在购物车系统中生成不重复订单号的方法

    2022-06-21 04:03:09
  • android线程消息机制之Handler详解

    2023-07-28 11:31:52
  • c#反射表达式树模糊搜索示例

    2022-01-09 07:03:31
  • java中的Io(input与output)操作总结(四)

    2021-10-11 03:14:19
  • 基于私钥加密公钥解密的RSA算法C#实现方法

    2022-12-01 07:52:37
  • Android中Textview和图片同行显示(文字超出用省略号,图片自动靠右边)

    2023-02-25 04:52:37
  • Hibernate实现批量添加数据的方法

    2023-11-29 08:53:56
  • idea如何设置Git忽略对某些文件或文件夹的版本追踪

    2021-08-24 02:58:15
  • Android中切换到主线程执行的方法

    2023-08-19 07:02:28
  • C#合并多种格式文件为PDF的方法

    2023-12-11 17:46:58
  • spring boot 注入 property的三种方式(推荐)

    2023-01-23 05:10:27
  • Java调用windows系统的CMD命令并启动新程序

    2021-11-27 17:09:13
  • C#中Params的用法

    2023-06-03 22:23:27
  • C#中实现一次执行多条带GO的sql语句实例

    2023-07-12 10:23:53
  • asp之家 软件编程 m.aspxhome.com