2015-07-19 2 views
2

Я пишу приложение, в котором я должен сохранить состояние Activity. У меня есть ImageView и Button на экране. Когда я нажимаю на ButtonImageView, измените фоновое изображение. Моя проблема в том, что когда я останавливаю Activity и снова запускаю его, ImageView показывает первое изображение. Я преобразовал свое изображение в String с Base64. Затем я сохранил строку с SharedPreferences. После этого я получил его и снова декодировал с Base64. У меня нет сообщения об ошибке, но оно не работает. Я копирую свой код, и если у кого есть идея, как это сделать, ответьте!Сохранить изображение как строку с SharedPreferences

public static final String IMAGE = "Image"; 
public static final String DB_INIT = "DB_INIT"; 

Button button; 
ImageView imageview; 

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

    SharedPreferences sp = getApplicationContext().getSharedPreferences(
      DB_INIT, MODE_PRIVATE); 
    String backimage = sp.getString(IMAGE, "res/drawable/my_image.png"); 

    button = (Button) findViewById(R.id.button1); 
    imageview = (ImageView) findViewById(R.id.imageview); 

    button.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      imageview.setBackgroundResource(R.drawable.szaz); 
     } 
    }); 
} 
@Override 
protected void onStop() { 
    SharedPreferences sp = getApplicationContext().getSharedPreferences(
      DB_INIT, MODE_PRIVATE); 
    SharedPreferences.Editor et = sp.edit(); 
    et.putString(IMAGE,"res/drawable/my_image.png"); 
    et.commit(); 
    super.onStop(); 
    } 
} 
+0

Мой вопрос ... ** почему **? вы можете просто сохранить ** путь изображения **. –

+0

Я попытался сохранить его, и после того, как он не сработал, я попробовал другой способ. Я не нашел, как сохранить путь изображения. Не могли бы вы рассказать мне, пожалуйста? –

+0

Это путь ** более простой ** и ** более эффективный **, чем сохранение целого изображения в виде представления ASCII. –

ответ

2

Просто попробуйте выполнить приведенный выше код и надейтесь, что он сработает для вас.

Bitmap realImage = BitmapFactory.decodeStream(stream); 
    ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
    realImage.compress(Bitmap.CompressFormat.JPEG, 100, baos); 
    byte[] b = baos.toByteArray(); 

    String encodedImage = Base64.encodeToString(b, Base64.DEFAULT); 
    textEncode.setText(encodedImage); 

    SharedPreferences shre = PreferenceManager.getDefaultSharedPreferences(this); 
    Editor edit=shre.edit(); 
    edit.putString("image_data",encodedImage); 
    edit.commit(); 

Любая помощь, сообщите мне об этом.

+0

Большое спасибо! Оно работает! :) –

+0

Ваш прием. Если он работает нормально, пожалуйста, поддержите мой вопрос, чтобы кто-то мог его понять, это прекрасно работает. –

0

Вы должны передать URL изображения в base64 и чем вы можете хранить его в строку, после того, что вы можете увидеть это.

+0

Спасибо за ваш ответ! Извините, но я действительно не понимаю, как это сделать. Можете ли вы объяснить это более четко, пожалуйста? –

+0

Я обновил вышеуказанный код. Попытайтесь реализовать это. –

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