You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将drawable文件夹中的XML Drawable转为String并存储到SQLite

XML Drawable转String存储到SQLite实现方案

分为两种常用实现路径,可根据你的实际需求选择:

方案1:存储XML源文本(适合无外部资源引用的Drawable XML)

  • 第一步:通过资源ID读取XML输入流
    // 替换为你的XML Drawable对应的资源ID
    InputStream inputStream = getResources().openRawResource(R.drawable.xxx);
    
  • 第二步:将输入流转换为字符串
    public String streamToString(InputStream inputStream) throws IOException {
        StringBuilder sb = new StringBuilder();
        BufferedReader br = new BufferedReader(new InputStreamReader(inputStream));
        String line;
        while ((line = br.readLine()) != null) {
            sb.append(line).append("\n");
        }
        br.close();
        return sb.toString();
    }
    
  • 第三步:将得到的字符串直接存入SQLite的TEXT类型字段即可
  • 还原Drawable方法:
    XmlPullParser parser = XmlPullParserFactory.newInstance().newPullParser();
    parser.setInput(new StringReader(从SQLite读取的XML字符串));
    Drawable drawable = Drawable.createFromXml(getResources(), parser);
    

注意:如果你的XML Drawable引用了其他资源(比如color、dimen等),直接读取源文本还原时会找不到对应资源,这种情况请使用方案2


方案2:存储Drawable渲染后转Base64的字符串(兼容性最好)

  • 第一步:将XML Drawable渲染为Bitmap
    Drawable originDrawable = ContextCompat.getDrawable(context, R.drawable.xxx);
    Bitmap bitmap = Bitmap.createBitmap(originDrawable.getIntrinsicWidth(), originDrawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888);
    Canvas canvas = new Canvas(bitmap);
    originDrawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
    originDrawable.draw(canvas);
    
  • 第二步:将Bitmap转Base64字符串
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    bitmap.compress(Bitmap.CompressFormat.PNG, 100, baos);
    byte[] bitmapBytes = baos.toByteArray();
    String base64Str = Base64.encodeToString(bitmapBytes, Base64.DEFAULT);
    
  • 第三步:将Base64字符串存入SQLite的TEXT类型字段即可
  • 还原Drawable方法:
    byte[] bytes = Base64.decode(从SQLite读取的Base64字符串, Base64.DEFAULT);
    Drawable drawable = new BitmapDrawable(getResources(), BitmapFactory.decodeByteArray(bytes, 0, bytes.length));
    

内容的提问来源于stack exchange,提问作者AtomicallyBeyond

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 21:45:03