2015-10-15 90 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

删除了android:背景=“@绘制/ 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:E/AndroidRuntime(505):引起:java.lang.NullPointerException 10-15 06:40:44.795:E/AndroidRuntime (505):\t at com.example.camera2.MainActivity.onCreate(MainActivity.java:38) –

0

余did't做这个任务ealier但我猜你可以存储图像作为首Base64编码字符串。当你想再次获取该图像,然后将Base64字符串转换为相应的图像。 您可以按照this链接到一个图像中的Base64字符串转换,并为Base64编码字符串转换为图像看到这个link

相关问题