assets目錄的使用

assets目錄是Android的一種特殊目錄,用于放置APP所需的固定文件,且該文件被打包到APK中時(shí),不會被編碼到二進(jìn)制文件。
默認(rèn)創(chuàng)建的空項(xiàng)目是沒有這個(gè)目錄的,只需要通過File——>New——>Folder——>Assets Folder就可以創(chuàng)建,assets目錄下可以放置圖片,Html文件,Json文件等等,這個(gè)目錄下的文件如何使用?

1.訪問圖片

需求是這樣的,我再assets目錄下放置了幾張.jpg和.png格式的圖片,我需要把這些圖片的路徑讀取出來做為一個(gè)List返回,先看代碼:

 public static List<String> getAssetPicPath(Context context) {
        AssetManager am = context.getAssets();
        String[] path = null;
        try {
            // "" 獲取所有,填入目錄獲取該目錄下所有資源,如需要獲取對應(yīng)的子文件夾內(nèi)容,可在這里設(shè)置
            path = am.list("");
        } catch (IOException e) {
            e.printStackTrace();
        }

        List<String> pciPaths = new ArrayList<>();
        for (int i = 0; i < path.length; i++) {
            if (path[i].endsWith(".png") || path[i].endsWith("jpg")) {
                pciPaths.add(path[i]);
            }
        }
        return pciPaths;
    }

可以看到,通過AssetManager先獲取了目錄下所有的文件路徑,然后再遍歷篩選出我們要的內(nèi)容,這個(gè)過程并不復(fù)雜,這里還需要注意,取出的圖片路徑如果需要加載到ImageView上顯示,需要這樣寫,我這里以使用Glide為例子:

String  img_path =pciPaths.get(position);
//路徑頭部
String PATH_HEAD = "file:///android_asset/";
Glide.with(mContext)
                    .load(PATH_HEAD + img_path)
                    .into(imageView);
2.訪問Html文件

這個(gè)使用比較簡單,結(jié)合webView使用,就一行代碼的事情:

 webView.loadUrl("file:////android_asset/test.html");

本地html文件通常也就是測試下原生與JavaScript交互的相關(guān)方法可行與否,一般正式的線上應(yīng)用,不怎么會 用到,android原生與Js交互也是很有意思的內(nèi)容,會在另一篇水文里介紹。

3.訪問Json文件

需求是,解析test.json文件,將獲取到的字典保存到本地?cái)?shù)據(jù)庫中,這種寫法一般都是開發(fā)階段構(gòu)建偽數(shù)據(jù)用,實(shí)際開發(fā)中肯定是通過數(shù)據(jù)接口來獲取的。
文件內(nèi)容是這個(gè),一個(gè)Json數(shù)組:

[
  {
    "name": "全部",
    "key": "all",
    "pid": "currentState"
  },
  {
    "name": "自住",
    "key": "r1Self",
    "pid": "currentState"
  },
  {
    "name": "租住",
    "key": "r2Rent",
    "pid": "currentState"
  },
  {
    "name": "借住",
    "key": "r3Borrow",
    "pid": "currentState"
  },
  {
    "name": "空置",
    "key": "r4Empty",
    "pid": "currentState"
  }
]

讀取出完整的Json串,并解析為List,通過GreenDao保存到本地的數(shù)據(jù)庫:

public static void initDictionAry(Context context) {
        DaoManager.getJFDictionaryDao().deleteAll();
        //字典值偽數(shù)據(jù),先寫到本地,后面協(xié)調(diào)統(tǒng)一通過接口返回
        AssetManager assetManager = context.getAssets();
        try {
            InputStreamReader inputStreamReader = new InputStreamReader(assetManager.open("test.json"), "UTF-8");
            BufferedReader reader = new BufferedReader(inputStreamReader);
            String line;
            StringBuilder builder = new StringBuilder();
            while ((line = reader.readLine()) != null) {
                builder.append(line);
            }
            reader.close();
            inputStreamReader.close();
            //獲取到完整的 json串
            String json = builder.toString();
            //解析為list
            List<JFDictionary> dictionaries = GsonUtils.fromJson(json, new TypeToken<List<JFDictionary>>() {
            }.getType());

            DaoManager.getJFDictionaryDao().saveInTx(dictionaries);

        } catch (IOException e) {
            e.printStackTrace();
        }
    }

核心是借助了AssetsManager和BufferReader來進(jìn)行讀取,這里還有一點(diǎn)補(bǔ)充的就是解析Json數(shù)組,是借助了TypeToken獲取到類型,通過GsonUtils來完成解析,這里把代碼貼一下,不再贅述:

public class GsonUtils {
    private static Gson gson = new Gson();

    public static <T> T fromJson(String json, Class clazz) {
        return (T) fromJson(json, (Type) clazz);
    }

    public static <T> T fromJson(String json, Type type) {
        return (T) gson.fromJson(json, type);
    }

    public static <T> T fromJson(Reader reader, Class clazz){
        return (T) gson.fromJson(reader,clazz);
    }

    public static <T> T fromJson(Reader reader,Type type){
        return (T)gson.fromJson(reader,type);
    }

    public static JsonElement toJson(Object object, Type typeOfSrc){
        return gson.toJsonTree(object, typeOfSrc);
    }
    public static String toJson(Object o){
        return gson.toJson(o);
    }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容