2013-06-28 63 views
2

我有一對ImageView的活動。用戶可以長按一個ImageView,他們可以選擇從相機畫廊獲取任何圖像。我試圖保存這些圖像的圖像路徑,以便當用戶關閉並再次打開應用程序時,圖像仍將位於imageView中。我不明白爲什麼這不起作用。如何使用共享首選項將多個圖像保存到ImageView

這裏是我的活動A在ImageView的是

public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (resultCode == RESULT_OK) { 
    if (requestCode == SELECT_PICTURE) { 
    Uri selectedImageUri = data.getData(); 
    selectedImagePath = getPath(selectedImageUri); 
    System.out.println("Image Path : " + selectedImagePath); 
    im1.setImageURI(selectedImageUri);}}} 

public String getPath(Uri uri) { 
    String[] projection = { MediaStore.Images.Media.DATA }; 
    Cursor cursor = managedQuery(uri, projection, null, null, null); 
    int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); 
    cursor.moveToFirst(); 
    return cursor.getString(column_index);}; 

    @Override 
protected void onPause() { 
    SharedPreferences sp = getSharedPreferences("AppSharedPref", 1); // Open SharedPreferences with name AppSharedPref 
    Editor editor = sp.edit(); 
    editor.putString("ImagePath", selectedImagePath); // Store selectedImagePath with key "ImagePath". This key will be then used to retrieve data.   
    editor.commit(); 
    super.onPause(); 
    } 

protected void onResume1() { 
    SharedPreferences sp = getSharedPreferences("AppSharedPref", 1); 
    selectedImagePath = sp.getString("ImagePath", ""); 
    super.onResume(); 
    } 

而活動B獲得的凸輪畫廊PIC,併發送回活動A

Button send = (Button) findViewById(R.id.send); 
    send.setOnClickListener(new OnClickListener() { 
     public void onClick(View v) { 
      Intent intent=new Intent(); 
      setResult(RESULT_OK, intent); 
      Bundle bundle=new Bundle(); 
      bundle.putInt("image",R.id.showImg); 
      intent.putExtras(bundle); 
      finish(); } 
      }); 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (resultCode == RESULT_OK) { 
     if (requestCode == SELECT_PICTURE) { 
      Uri selectedImageUri = data.getData(); 
      selectedImagePath = getPath(selectedImageUri); 
      System.out.println("Image Path : " + selectedImagePath); 
      img.setImageURI(selectedImageUri); 
     }}} 
public String getPath(Uri uri) { 
    String[] projection = { MediaStore.Images.Media.DATA }; 
    Cursor cursor = managedQuery(uri, projection, null, null, null); 
    int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); 
    cursor.moveToFirst(); 
    return cursor.getString(column_index); 
    } 
+0

你爲什麼要創建'onResume1()'?我告訴過你要用'onPause()'來覆蓋'onResume()'方法(不要創建另一個)。 –

回答

3

品牌:

@Override 
protected void onResume() { 
    SharedPreferences sp = getSharedPreferences("AppSharedPref", 1); 
    selectedImagePath = sp.getString("ImagePath", ""); 
    Bitmap myBitmap = BitmapFactory.decodeFile(selectedImagePath); 
    im1.setImageBitmap(myBitmap); 
    super.onResume(); 
} 

代替:

protected void onResume1() { 
    SharedPreferences sp = getSharedPreferences("AppSharedPref", 1); 
    selectedImagePath = sp.getString("ImagePath", ""); 
    super.onResume(); 
} 

因爲您的活動擴展了Activity類,該類聲明並實現了此方法。此方法在Activity返回到前景後調用。你想要的是重寫這個方法,以便它做你想做的事情。

+0

我必須在代碼中做其他事情。這應該工作,但它不是。我在這方面很新穎,我試圖儘快達成。在我能夠在我的應用程序中實現類似的東西之前,我需要了解更多關於android編程的知識。也許我會在版本2中做到這一點。感謝您的幫助。 – SmulianJulian

+0

確實你必須,但方法重寫是一個java概念,而不是android本身。你有什麼錯誤嗎? –

+0

沒有錯誤。我得到圖片ImageView。我去了另一個頁面回來,它消失了。 – SmulianJulian