Android 读取sdcard, 查询图片并展示在列表上

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_40116418/article/details/86624250

上图:      可以通过车牌和日期进行查询

详细注解代码中看,废话不多说直接上代码:

----------------------------Main2Activity---------------------------

package com.example.zhuoshi.watermarkdemo;

import android.graphics.Bitmap;
import android.os.Environment;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import java.util.ArrayList;

public class Main2Activity extends AppCompatActivity{
    private static String filePath = Environment.getExternalStorageDirectory()+"";
    private static final String TAG = "Main2Activity";
    private ArrayList<Bitmap> imageList = new ArrayList<>();
    private EditText researchEdit;
    private Button researchBtn;
    private ListView listview;
    private String editContent;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);

        listview = findViewById(R.id.listview);
        researchEdit = findViewById(R.id.research_edit);
        researchBtn = findViewById(R.id.research_btn);


        researchBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                editContent = researchEdit.getText().toString().trim();
                Log.d(TAG, "onCreate: editContent:"+editContent);
                if (!editContent.equals("")){
                    queryImage(editContent);
                    MyAdatpter myAdatpter = new MyAdatpter();
                    listview.setAdapter(myAdatpter);
                }
            }
        });
    }

    private void queryImage(String editContent) {

        //第一步
        QueryImageUtil.getmInstance(Main2Activity.this);
        //第二步
        QueryImageUtil.setOnQueryListener(new QueryImageUtil.OnQueryListener() {
            @Override
            public void onQuerySuccess(String success) {
                Toast.makeText(Main2Activity.this, success, Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onQueryFailure(String failure) {
                Toast.makeText(Main2Activity.this, failure, Toast.LENGTH_SHORT).show();
            }
        });
        //第三步
        ArrayList<Bitmap> bitmaps = QueryImageUtil.initFile(filePath, editContent);
        imageList = bitmaps;


    }


    private class MyAdatpter extends BaseAdapter{

        @Override
        public int getCount() {

            return imageList.size();
        }

        @Override
        public Object getItem(int i) {

            return imageList.get(i);
        }

        @Override
        public long getItemId(int i) {
            return i;
        }

        @Override
        public View getView(int i, View view, ViewGroup viewGroup) {
            View mView = View.inflate(Main2Activity.this,R.layout.listview_item,null);
            TextView plateTv = mView.findViewById(R.id.plate_tv);
            ImageView cardImg = mView.findViewById(R.id.card_img);
            plateTv.setText("");
            cardImg.setImageBitmap(imageList.get(i));
            return mView;
        }
    }


}

----------------------------QueryImageUtil---------------------------

package com.example.zhuoshi.watermarkdemo;

import android.annotation.SuppressLint;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Environment;
import android.util.Log;
import java.io.File;
import java.util.ArrayList;
import java.util.List;

/**
 * Author: baipenggui
 * Date: 2019/1/24 16:06
 * Email: [email protected]
 * Description: 从sdcard中查询出保存的图片
 */
public class QueryImageUtil {
    private static ArrayList<Bitmap> imageList = new ArrayList<>();
    private static List<String> imagePathList = new ArrayList<>();
    private static QueryImageUtil mInstance;
    private static String mFileRootPath;
    private static Bitmap bitmap;
    private static String filePath;
    private static Context mContext;
    private static String TAG;
    private static boolean successCallOne = false;//查询成功的接口只调用一侧
    private static boolean failureCallOne = false;//查询成功的接口只调用一侧
    private static OnQueryListener onQueryListener;

    /*
     *@Description: 获取查询图片的实例,这是第一步
     *@Params:
     *@Author: baipenggui
     *@Date: 2019/1/24
     */
    public static QueryImageUtil getmInstance(Context context) {
        mContext = context;
        if (mInstance == null) {
            mInstance = new QueryImageUtil();
        }
        TAG = mContext.getClass().getName();

        return mInstance;
    }

    /*
     *@Description:初始化sdcard文件  这是第三步
     *@Params: fileRootPath  存储文件的根路径
     *@params: editcontent  输入框中的内容
     *@Author: baipenggui
     *@Date: 2019/1/24
     */
    public static ArrayList<Bitmap> initFile(String fileRootPath, String editcontent) {
        mFileRootPath = fileRootPath;
        //获取路径是否成功
        if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
            filePath = fileRootPath + "/plate/";
        }

        //添加之前先清空集合
        imageList.clear();
        //获取图片路径集合
        List<String> imagePathList = getImagePathFromSD();

        File mFile = new File(filePath);
        //文件夹不存在则创建
        if (!mFile.exists()) {
            mFile.mkdir();
        } else {
            //遍历路径集合,判读路径找回功能是否存在输入框中获取的内容
            for (int i = 0; i < imagePathList.size(); i++) {
                Log.d(TAG, "imagePathList: " + imagePathList.get(i));
                String imagePath = imagePathList.get(i);
                if (editcontent.length() > 0 || editcontent != null) {
                    boolean contains = imagePath.contains(editcontent);
                    //如果存在,则将已存在该字段的路径通过BitmapFactory.decodeFile转化为bitmap格式,通过接口获取查询结果
                    if (contains) {
                        bitmap = BitmapFactory.decodeFile(imagePathList.get(i));
                        imageList.add(bitmap);
                        if (successCallOne == false) {
                            Log.d(TAG, "onQueryListener: " + onQueryListener);
                            if (onQueryListener != null) {
                                onQueryListener.onQuerySuccess("查询成功");
                            }
                            successCallOne = true;
                        }

                    } else {
                        if (failureCallOne == false) {
                            if (onQueryListener != null) {
                                onQueryListener.onQueryFailure("没有发现该车辆");
                            }
                        }
                        failureCallOne = true;
                    }
                } else {
                    Log.d(TAG, "editcontent is null !");
                }

            }

            Log.d(TAG, "imageList: " + imageList);
        }

        return imageList;
    }

    /**
     * 从sd卡获取图片资源
     */
    private static List<String> getImagePathFromSD() {
        //添加之前先清空集合
        imagePathList.clear();
        // 得到sd卡内plate文件夹的路径
        String filePath = mFileRootPath.toString() + File.separator + "/plate/";
        // 得到该路径文件夹下所有的文件
        File fileAll = new File(filePath);
        File[] files = fileAll.listFiles();
        // 将所有的文件存入ArrayList中,并过滤所有图片格式的文件
        for (int i = 0; i < files.length; i++) {
            File file = files[i];
            if (checkIsImageFile(file.getPath())) {
                imagePathList.add(file.getPath());
            }
        }
        // 返回得到的图片列表
        return imagePathList;
    }

    /**
     * 检查扩展名,得到图片格式的文件
     */
    @SuppressLint("DefaultLocale")
    private static boolean checkIsImageFile(String fName) {
        boolean isImageFile = false;
        //获取扩展名
        String FileEnd = fName.substring(fName.lastIndexOf(".") + 1,
                fName.length()).toLowerCase();
        if (FileEnd.equals("jpg") || FileEnd.equals("png") || FileEnd.equals("gif")
                || FileEnd.equals("jpeg") || FileEnd.equals("bmp")) {
            isImageFile = true;
        } else {
            isImageFile = false;
        }
        return isImageFile;
    }

    /*
     *@Description: 查询成功,失败结果的回调  这是第二步, 注意:调用接口需要在initFile()之前, 否则onQueryListener为空
     *@Params:
     *@Author: baipenggui
     *@Date: 2019/1/24
     */
    public static void setOnQueryListener(OnQueryListener onQuery) {
        onQueryListener = onQuery;
    }

    public interface OnQueryListener {
        void onQuerySuccess(String success);

        void onQueryFailure(String failure);
    }


}

----------------------------activity_main2.xml---------------------------

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".Main2Activity">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="60dp">

        <EditText
            android:id="@+id/research_edit"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="1" />

        <Button
            android:id="@+id/research_btn"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="搜索" />
    </LinearLayout>

    <ListView
        android:id="@+id/listview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"></ListView>

</LinearLayout>

  Demo源码  从百度云下载 ,提取码 zsix

猜你喜欢

转载自blog.csdn.net/qq_40116418/article/details/86624250
今日推荐