14

ログイン後のアプリケーションでは、ユーザー名と画像を他のページの共有設定に保存する必要があります。名前を設定して保存することはできますが、画像を保存する方法がわかりません。

私はそのようなことを試みています-

SharedPreferences myPrefrence;
    String namePreferance="name";

    String imagePreferance="image";

SharedPreferences.Editor editor = myPrefrence.edit();
                editor.putString("namePreferance", itemNAme);
                editor.putString("imagePreferance", itemImagePreferance);
                editor.commit();

オブジェクトに変換した後、画像を文字列として保存しようとしています。しかし、それをビットマップに再変換すると、何も得られませんでした。

4

4 に答える 4

53

私はあなたの問題を解決しました:

  1. ビットマップを文字列 base64 にエンコードするメソッドを記述します。

    // method for bitmap to base64
    public static String encodeTobase64(Bitmap image) {
        Bitmap immage = image;
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        immage.compress(Bitmap.CompressFormat.PNG, 100, baos);
        byte[] b = baos.toByteArray();
        String imageEncoded = Base64.encodeToString(b, Base64.DEFAULT);
    
        Log.d("Image Log:", imageEncoded);
        return imageEncoded;
    }
    
  2. あなたの好みの何かのように、このメソッド内にビットマップを渡します:

    SharedPreferences.Editor editor = myPrefrence.edit();
    editor.putString("namePreferance", itemNAme);
    editor.putString("imagePreferance", encodeTobase64(yourbitmap));
    editor.commit();
    
  3. 画像を任意の場所に表示したい場合は、decode メソッドを使用して再度ビットマップに変換します。

    // method for base64 to bitmap
    public static Bitmap decodeBase64(String input) {
        byte[] decodedByte = Base64.decode(input, 0);
        return BitmapFactory
                .decodeByteArray(decodedByte, 0, decodedByte.length);
    }
    
  4. このメソッド内に文字列を渡して、必要なことを行ってください。

于 2013-08-07T04:42:34.940 に答える
6
Finally I solved this problem.

ステップ:- 1. 前のアクティビティからインテント データを取得するために、onCreate() にいくつかのコードを書きました。

 private  Bitmap bitmap;

 Intent intent = getIntent();

        if (getIntent().getExtras() != null)
        {
            // for get data from intent

            bitmap = intent.getParcelableExtra("PRODUCT_PHOTO");

            // for set this picture to imageview

            your_imageView.setImageBitmap(bitmap);

             sharedPreferences();

        }else
        {
            retrivesharedPreferences();
        }

2 sharedPreferences() を作成し、このコードを配置します

 private void sharedPreferences()
    {
        SharedPreferences shared = getSharedPreferences("App_settings", MODE_PRIVATE);
        SharedPreferences.Editor editor = shared.edit();
        editor.putString("PRODUCT_PHOTO", encodeTobase64(bitmap));
        editor.commit();
    }

3 retrievesharedPreferences() このメソッドを作成し、このコードを配置します。

private void retrivesharedPreferences()
    {
      SharedPreferences shared = getSharedPreferences("MyApp_Settings", MODE_PRIVATE);
        String photo = shared.getString("PRODUCT_PHOTO", "photo");
        assert photo != null;
        if(!photo.equals("photo"))
        {
            byte[] b = Base64.decode(photo, Base64.DEFAULT);
            InputStream is = new ByteArrayInputStream(b);
            bitmap = BitmapFactory.decodeStream(is);
            your_imageview.setImageBitmap(bitmap);
        }

    }

4 encodeTobase64() メソッドを記述して、ビットマップを文字列 base64 にエンコードし、このメソッドにコードを挿入します。

 public static String encodeTobase64(Bitmap image) {
        Bitmap bitmap_image = image;
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        bitmap_image.compress(Bitmap.CompressFormat.PNG, 100, baos);
        byte[] b = baos.toByteArray();
        String imageEncoded = Base64.encodeToString(b, Base64.DEFAULT);

        return imageEncoded;
    }

お役に立てば幸いです。

于 2015-07-29T13:45:19.480 に答える