2011-09-06 26 views
9

私はAndroidで新しいです。 sharedPreferencesに私のビットマップを保存したい。誰がどのようにそれが可能か教えてくれますか?実際に私の要件は、私はギャラリーから画像を取得するだけでなく、カメラから画像を取得し、私はImageViewでそのビットマップを設定します。これらのすべてのものが適切に機能します。しかし、戻るボタンをクリックすると、ImageViewはすべて空になります。AndroidのsharedPreferencesでビットマップを保存および取得する方法は?

私はアプリケーション全体にそのビットマップを保存したいと思います。

誰でも手伝ってもらえますか?私はこれに非常に執着しています。

ありがとうございました。

+0

を実行してください。これは間違いなく助けになります。 [1] [1] を[こちらをクリック]:http://stackoverflow.com/questions/17268519/how-to-store-bitmap-object-in-sharedpreferences-in-android私が使用 –

答えて

11

ちょっと友人をお読みください。ボタンをクリック - カメラを開いて画像をキャプチャする

ContentValues values = new ContentValues(); 
values.put(MediaStore.Images.Media.TITLE, fileName); 
mCapturedImageURI = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values); 

Intent cameraIntent = new Intent("android.media.action.IMAGE_CAPTURE"); 
cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, mCapturedImageURI); 
startActivityForResult(cameraIntent, CAMERA_REQUEST); 

2)。ボタンをクリックすると選択した画像のギャラリーが開きます

Intent galleryintent = new Intent(Intent.ACTION_GET_CONTENT); 
galleryintent.setType("image/*"); 
startActivityForResult(galleryintent, IMAGE_PICK); 

3)。静的変数

private static final int CAMERA_REQUEST = 0; 
    private static final int IMAGE_PICK = 1; 

4)。 onActivityResult

protected void onActivityResult(int requestCode, int resultCode, Intent data) 
     { 
      switch(requestCode) 
      { 
       case CAMERA_REQUEST: 
        if(resultCode == RESULT_OK) 
        { 
         String[] projection = { MediaStore.Images.Media.DATA}; 
         Cursor cursor = managedQuery(mCapturedImageURI, projection, null, null, null); 
         int column_index_data = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); 
         cursor.moveToFirst(); 
         String capturedImageFilePath = cursor.getString(column_index_data); 
         Log.d("photos*******"," in camera take int "+capturedImageFilePath); 

         Bitmap photo_camera = BitmapFactory.decodeFile(capturedImageFilePath, options); 

         if(data != null) 
         { 
    img_1.setImageBitmap(photo_camera); 
           prefsEditor.putString(Global.PHOTO_1,capturedImageFilePath); 
    } 
    } 
case IMAGE_PICK: 
       if(resultCode == RESULT_OK) 
       { 
        Uri selectedImage = data.getData(); 
        String[] filePathColumn = {MediaStore.Images.Media.DATA}; 

        Cursor cursor = getContentResolver().query(selectedImage, filePathColumn, null, null, null); 
        cursor.moveToFirst(); 

        int columnIndex = cursor.getColumnIndex(filePathColumn[0]); 
        String filePath = cursor.getString(columnIndex); 
        cursor.close(); 

//     Bitmap photo = BitmapFactory.decodeFile(filePath); 
        Bitmap photo_gallery = BitmapFactory.decodeFile(filePath,options); 
        img_1.setImageBitmap(photo_gallery); 
         prefsEditor.putString(Global.PHOTO_1, filePath); 
} 

} 
     prefsEditor.commit(); 
} 

5)。 onDestroy() 設定したすべてのビットマップを破棄する必要があります。

@Override 
    public void onDestroy() 
    { 
     super.onDestroy(); 
     if(photo_camera != null) 
     { 
      photo_camera.recycle(); 
     } 
     if(photo_gallery != null) 
     { 
      photo_gallery.recycle(); 
     } 
} 

6)。 sharedPrefrencesからデータを取得するときに、文字列をビットマップに変換してからImageViewでビットマップを設定する必要があります。 たとえば、Bitmap bit1 = BitmapFactory.decodeFile(strimg1); を設定してから、imageView.setImageBitmap

+0

あなたの問題の解決策を投稿してくれてありがとう。あなたの回答を選択したものとして設定し、回答のないリストから回答を削除します。 – blessenm

+0

ちょっと@anddev完成したコードを投稿できますか? –

2

あなたはこのようSharedPreferenceに値を追加することができます:あなたはSharedPreferenceにのみBoolean, Float, Int, Long, String値を追加することができます

SharedPreferences pref = getSharedPreferences("abc", 0); 
Editor edit = pref.edit(); 
edit.putBoolean(arg0, arg1); 
edit.putFloat(arg0, arg1); 
edit.putInt(arg0, arg1); 
edit.putLong(arg0, arg1); 
edit.putString(arg0, arg1); 
edit.commit(); 

イメージを保存するには、デバイスの外部メモリまたは内部メモリが必要です。

+0

おかげで、あなたが言ったとおりに。しかし、今私はビットマップに私のイメージを表示から文字列を変換したい。文字列をビットマップに変換する方法はありますか? – anddev

+0

これを試してください:http:// stackoverflow。com/questions/5405373/convert-string-as-a-bitmap-in-android –

3

sharedpreferenceにビットマップを格納しないでください。アプリケーションの存続期間中に永続化する必要がある場合は、staticフィールドに割り当てることができます。デバイスを再起動しても永続化したい場合は、ファイルまたはデータベースに入れます。詳細については

は、)私は他の人がこのソリューションを使用できるように、私は

1 ..私のコードを投稿ここで私の問題の解決策を持ってhttp://developer.android.com/resources/faq/framework.html#3

関連する問題