2015-10-15 3 views
0

Мой код ниже помещает изображение из галереи в мой ImageButton Но всегда, когда я покидаю приложение или перехожу к другому действию, изображение не сохраняется, и первый фон появляется снова.Как сохранить изображение с помощью sharedpreferences? Android

мне нужна помощь, как я могу сохранить изображение, которое я определяю быть мой ImageButton фон

Я читал о sharedpreferences, но я не знаю, как использовать на мое приложение

-

- Мой класс

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 


    //Adding the picture bit 

    imgButton = (ImageButton) findViewById(R.id.AddPic); 
    imgButton.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Intent GaleryIntent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 
      startActivityForResult(GaleryIntent, RESULT_LOAD_IMAGE); 
     } 
    }); 
} 
@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 

    super.onActivityResult(requestCode, resultCode, data); 
    if (requestCode == RESULT_LOAD_IMAGE && resultCode == RESULT_OK && null != data) { 
     Uri SelectedImage = data.getData(); 
     String[] FilePathColumn = {MediaStore.Images.Media.DATA }; 

     Cursor SelectedCursor = getContentResolver().query(SelectedImage, FilePathColumn, null, null, null); 
     SelectedCursor.moveToFirst(); 

     int columnIndex = SelectedCursor.getColumnIndex(FilePathColumn[0]); 
     String picturePath = SelectedCursor.getString(columnIndex); 
     SelectedCursor.close(); 

     // Drawable d = new BitmapDrawable(getResources(),BitmapFactory.decodeFile(picturePath)); 
     // btnOpenGalery .setImageBitmap(d); 
     imgButton.setImageBitmap(BitmapFactory.decodeFile(picturePath)); 
     Toast.makeText(getApplicationContext(), picturePath, Toast.LENGTH_SHORT).show(); 

    } 

} 

мой XML

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:gravity="center" 
    android:orientation="vertical" > 

<ImageButton 
    android:id="@+id/AddPic" 
    android:layout_width="100dp" 
    android:layout_height="100dp" 
    android:layout_gravity="center" 
    android:gravity="left" 
    android:onClick="AddPic" 
    android:background="@drawable/ic_launcher" /> 

</LinearLayout> 
+0

Удалить андроид: фон = «@ вытяжка/ic_lancher» линия от вашего ImageButton, это может помочь вам если в случае. –

+0

Возможный дубликат [Как сохранить изображение в общих предпочтениях в Android | Общая проблема с предпочтением в Android с изображением] (http://stackoverflow.com/questions/18072448/how-to-save-image-in-shared-preference-in-android-shared-preference-issue-in-a) –

ответ

0

Если вы хотите использовать sharedPreferences, используйте следующий код:

SharedPreferences sharedPreferences; 

protected void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
setContentView(R.layout.activity_main); 
sharedPreferences = getSharedPreferences("data", context.MODE_PRIVATE); 

    //Adding the picture bit  

imgButton = (ImageButton) findViewById(R.id.AddPic); 
imgButton.setOnClickListener(new OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     Intent GaleryIntent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 
     startActivityForResult(GaleryIntent, RESULT_LOAD_IMAGE); 
    } 
}); 

if(sharedPreferences!=null) 
String path = sharedPreferences.getString("path", null); 
if(path!=null) 
    imgButton.setImageBitmap(BitmapFactory.decodeFile(path)); 




} 
@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 

super.onActivityResult(requestCode, resultCode, data); 
if (requestCode == RESULT_LOAD_IMAGE && resultCode == RESULT_OK && null != data) { 
    Uri SelectedImage = data.getData(); 
    String[] FilePathColumn = {MediaStore.Images.Media.DATA }; 

    Cursor SelectedCursor = getContentResolver().query(SelectedImage, FilePathColumn, null, null, null); 
    SelectedCursor.moveToFirst(); 

    int columnIndex = SelectedCursor.getColumnIndex(FilePathColumn[0]); 
    String picturePath = SelectedCursor.getString(columnIndex); 
    SelectedCursor.close(); 
    SharedPreferences.Editor editor = sharedPreferences.edit(); 
    editor.putString("path", picturePath); 
    editor.commit(); 

    // Drawable d = new BitmapDrawable(getResources(),BitmapFactory.decodeFile(picturePath)); 
    // btnOpenGalery .setImageBitmap(d); 
    imgButton.setImageBitmap(BitmapFactory.decodeFile(picturePath)); 
    Toast.makeText(getApplicationContext(), picturePath, Toast.LENGTH_SHORT).show(); 

} 

}

+0

получить ошибку в контексте: контекст не может быть разрешен переменной. Что я делаю? –

+0

удалите его! не требуется здесь. –

+0

не работал:/ часть LogCat: 10-15 06: 40: 44,795: Е/AndroidRuntime (505): Вызванный: java.lang.NullPointerException 10-15 06: 40: 44.795: Е/AndroidRuntime (505): \t at com.example.camera2.MainActivity.onCreate (MainActivity.java:38) –

0

Я did't сделать эту задачу ealier, но, как я думаю, вы можете сохранить изображение как Base64 строку в настройках , Когда вы захотите снова получить это изображение, переведите строку Base64 в соответствующее изображение. Вы можете следить за this ссылкой, чтобы преобразовать изображение в Base64 строке и преобразовать Base64 строку к изображению увидеть это link

Смежные вопросы