将drawable转换为字符串以传递给另一个活动

时间:2012-11-06 02:24:28

标签: android bitmap drawable sharedpreferences

我正在尝试将drawable转换为字符串,并使用此方法通过共享首选项将其传递给另一个活动。 loadIcon 可绘制

活动1

try {
    ai = pm.getApplicationInfo(pInfo.packageName, PackageManager.GET_META_DATA);
} 
catch (NameNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

    loadIcon = ai.loadIcon(pm);

    Log.i("Icon drawable", loadIcon.toString());
                SharedPreferences preferences = getSharedPreferences("ANALYZE_PREF", MODE_PRIVATE);
                SharedPreferences.Editor editor = preferences.edit();
                editor.putString("drawable", loadIcon.toString());
                editor.commit();

这是我在Logcat中得到的:

11-06 10:13:28.995: I/Drawable shared(16786): android.graphics.drawable.BitmapDrawable@417f2aa8

尝试在其他活动中检索它

活动2

SharedPreferences settings = getSharedPreferences("ANALYZE_PREF", MODE_PRIVATE);
String drawableString = settings.getString("drawable", ""); 
Log.i("Drawable shared", drawableString);
Drawable drawableImage = getDrawable(drawableString);
imageView.setBackgroundDrawable(drawableImage);

       public Drawable getDrawable(String bitmapUrl) {
              try {
                URL url = new URL(bitmapUrl);
                Drawable d =new BitmapDrawable(BitmapFactory.decodeStream(url.openConnection().getInputStream()));
                Log.i("d value", "d value " + d);
                return d; 
              }
              catch(Exception ex) {
                  Log.i("Null", "Drawable returns null");
                  return null;
              }
       }

尝试将其转换回可绘制的

时,我得到一个null

logcat的:

11-06 10:13:28.995: I/Null(16786): Drawable returns null

2 个答案:

答案 0 :(得分:1)

问题是您将android.graphics.drawable.BitmapDrawable@417f2aa8作为字符串传递,然后尝试将其用作URL对象。您无法从此数据中创建URL

说实话,我不确定你为什么要这样做。两个Activity对象都从相同的上下文运行并具有相同的图标。为什么尝试将其保存在首选项中并在第二个Activity中获取图标时立即加载?

你将不得不以某种方式切换你的实现; Drawable并非都有URL个。

答案 1 :(得分:1)

  

我也面对同样的问题,我喜欢这样..

Bitmap photo = (Bitmap) data.getExtras().get("data");
ByteArrayOutputStream bao = new ByteArrayOutputStream();
photo.compress(Bitmap.CompressFormat.JPEG, 90, bao);
byte [] ba = bao.toByteArray();
String ba1=Base64.encodeBytes(ba);
  

然后将此字符串发送到其他活动。     然后解码这个Base64代码...