0

J'ai mis en œuvre l'option de sélecteur d'image de la galerie dans mon application. Après avoir choisi l'image de la galerie ou de prendre une photo de la caméra, je la garde en partage préférentiel afin que l'utilisateur puisse voir cette image quand il reviendra à cette activité. Maintenant, je veux utiliser cette image dans une autre activité. Mais je ne sais pas comment je peux passer cet imagr de cette classe de frgament à l'activité principale.Modifier l'image via la préférence partagée d'une activité à l'autre android

Voici mon code pour le sélecteur d'image et le conserver dans la Préférence partagée.

public class ViewProfileFragment extends Fragment implements View.OnClickListener{ 


    private ImageView image; 

    private int REQUEST_CAMERA = 0, SELECT_FILE = 1; 

    String userChoosenTask; 
    Bitmap bm; 
    String currentPhotoPath; 
    Uri uri; 

    private String UPLOAD_URL = Constants.HTTP.PHOTO_URL; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     // Inflate the layout for this fragment 
     View rootView = inflater.inflate(R.layout.fragment_view_profile, container, false); 


     image=(ImageView)rootView.findViewById(R.id.profile_pic); 
     saveData(); 
     return rootView; 
    } 
    public void saveData(){ 
     ..... 
     if (results.size() > 0) { 
      ...... 

      SharedPreferences preferences = 
        PreferenceManager.getDefaultSharedPreferences(getActivity()); 
      String mImageUri = preferences.getString("image", null); 
      if (mImageUri != null) { 
       image.setImageURI(Uri.parse(mImageUri)); 
       System.out.println("imageuri"+Uri.parse(mImageUri)); 
      } else { 
       Glide.with(this) 
         .load(Constants.HTTP.PHOTO_URL+mail) 
         .thumbnail(0.5f) 
         .override(200,200) 
         .diskCacheStrategy(DiskCacheStrategy.ALL) 
         .into(image); 

       System.out.println(Constants.HTTP.PHOTO_URL+mail); 
      } 

    } 


    private void galleryAddPic() { 
     Intent mediaScanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE); 
     File f = new File(currentPhotoPath); 
     uri = Uri.fromFile(f); 
     mediaScanIntent.setData(uri); 
     this.getActivity().sendBroadcast(mediaScanIntent); 

     SharedPreferences preferences = 
       PreferenceManager.getDefaultSharedPreferences(getActivity()); 
     SharedPreferences.Editor editor = preferences.edit(); 
     editor.putString("image", String.valueOf(uri)); 
     editor.commit(); 

     try { 
      Bitmap bitmap = MediaStore.Images.Media.getBitmap(getActivity().getContentResolver(), uri); 
      image.setImageBitmap(bitmap); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 

    private void onCaptureImageResult() { 
     Bitmap bitmap = getBitmapFromPath(currentPhotoPath, 200, 200); 
     image.setImageBitmap(bitmap); 
     compressBitMap(bitmap); 
    } 

    private void onSelectFromGalleryResult(Intent data) { 
     uri = data.getData(); 
     String[] projection = {MediaStore.Images.Media.DATA}; 
     Cursor cursor = getContext().getContentResolver().query(uri, projection, null, null, null); 
     if (cursor != null) { 
      int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); 
      cursor.moveToFirst(); 
      currentPhotoPath = cursor.getString(column_index); 
      uri = Uri.fromFile(new File(currentPhotoPath)); 
      cursor.close(); 
     } else { 
      currentPhotoPath = uri.getPath(); 
     } 

     SharedPreferences preferences = 
       PreferenceManager.getDefaultSharedPreferences(getActivity()); 
     SharedPreferences.Editor editor = preferences.edit(); 
     editor.putString("image", String.valueOf(uri)); 
     editor.commit(); 

     try { 
      Bitmap bitmap = MediaStore.Images.Media.getBitmap(getActivity().getContentResolver(), uri); 
      image.setImageBitmap(bitmap); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     bm = BitmapFactory.decodeFile(currentPhotoPath); 
     compressBitMap(bm); 
    } 
} 

Et ceci est une autre activité où je veux voir cette image en utilisant sharedprefenace

Modifié code

public class MainOptionPage extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener{ 


    private ImageView imgProfile; 
    RealmResults<MyColleagueModel> results; 

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

     .... 
     // Navigation view header 

     Intent intent = getIntent(); 
     navigationHeader= navigationView.getHeaderView(0); 
     .... 
     imgProfile = navigationHeader.findViewById(R.id.profile_image); 

     // load nav menu header data 
     loadNavHeader(); 

     //setupDrawerContent(navigationView); 

     navigationView.setNavigationItemSelectedListener(this); 
    } 

    private void loadNavHeader() { 

     GlobalClass globalClass = new GlobalClass(); 
     String mEmail = globalClass.getEmail_info(); 

     Realm profileRealm; 
     profileRealm = Realm.getDefaultInstance(); 

     results = profileRealm.where(MyColleagueModel.class).equalTo("mail", mEmail).findAll(); 

     //fetching the data 
     results.load(); 

     // name, website 
     String name=null; 
     String profile_image; 
     byte[] profile_byte = new byte[0]; 

     // if(globalClass.readDatafromStorage().contains("ACTIVATE")) { 
      name = " "; 
      if (results.size() > 0) { 
       name = results.get(0).getName().toString(); 
      } 
      profile_image = globalClass.getImage_urlpath(); 


      profile_image = globalClass.getImage_urlpath(); 
     SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this); 
     String mImageUri = preferences.getString("image", null); 
     if (mImageUri != null) { 
      imgProfile.setImageURI(Uri.parse(mImageUri)); 

     System.out.println("imageuri"+Uri.parse(mImageUri)); 
     } else { 
      Glide.with(this).load(profile_image) 
        .thumbnail(0.5f) 
        .override(200, 200) 
        .diskCacheStrategy(DiskCacheStrategy.ALL) 
        .into(imgProfile); 
      Log.d("--LoginPage_NAME--", name); 
     } 

     txtName.setText(name); 
     txtWebsite.setText(mEmail); 


     Glide.with(this).load(profile_image) 
       .thumbnail(0.5f) 
       .override(200,200) 
       .diskCacheStrategy(DiskCacheStrategy.ALL) 
       .into(imgProfile); 

     // TODO: 11/9/17 set bitmap in imageview by removing below comment 

    } 
+3

Essayez le même que vous avez fait de l'activité ViewProfileFragment 'SharedPreferences préférences = PreferenceManager.getDefaultSharedPreferences (this); String mImageUri = preferences.getString ("image", null); '@ tamrezh21 – UltimateDevil

+0

vous n'avez pas besoin de passer l'image à une autre activité, faites simplement la même chose que vous avez utilisée pour extraire l'image de SharedPreference. – RajatN

+0

@VikasTiwari J'ai modifié le code dans l'option principale, mais je n'ai toujours pas obtenu d'image – tamrezh21

Répondre

1

Depuis que vous stockez dans les préférences, vous pouvez accéder à il via les préférences comme mentionné dans les commentaires ci-dessus.

SharedPreferences preferences = preferenceManager.getDefaultSharedPreferences(this); 
String mImageUri = preferences.getString("image", null); 

if (mImageUri!=null){ 
    // load image 
} 

Crédits @ Vikas-Tiwari

+0

J'ai modifié le code mais je ne vois pas l'image mise à jour dans MainOptionPage – tamrezh21

+0

Parce que vous avez besoin d'un moyen de rafraîchir l'image. Rendez votre méthode 'loadNavHeader()' publique, dans votre fragment, lancez votre getActivity() vers l'activité principale quelque chose comme ceci: 'if (getActivity() instanceof MainAcitivty) {((MainAcitivity) getActivity()). LoadNavHeader()} 'qui mettra à jour l'image dans l'activité quand il est changé dans le fragment. N'oubliez pas de l'ajouter après la sauvegarde de l'uri de la nouvelle image dans les prefs – MadScientist

+1

Merci pour votre réponse. ça marche, je vais mettre à jour la question. – tamrezh21

0

Comme vous l'avez déjà suggéré, vous pouvez utiliser partagé pour accéder à l'image.
Le conseil que je vous donne est de créer une seule classe où vous créez les préférences partagées et récupérez l'instance à tout moment.
Exemple:

public class MySharedPreferences { 

    private static MySharedPreferences mInstance; 
    private static Context mCtx; 

    private MySharedPreferences(Context context) { 
     mCtx = context; 
    } 

    public static synchronized MySharedPreferences getInstance(Context context) { 
     if (mInstance == null) { 
      mInstance = new MySharedPreferences(context); 
     } 
     return mInstance; 
    } 


    public boolean saveData(String data1, String data2) { 
     SharedPreferences sharedPreferences = mCtx.getSharedPreferences(MyPREFERENCES, Context.MODE_PRIVATE); 
     SharedPreferences.Editor editor = sharedPreferences.edit(); 
     editor.putString(KEY1, data1); 
     editor.putString(KEY2, data2); 
     return editor.commit(); 
    } 

public String getData1() { 
     SharedPreferences sharedPreferences = mCtx.getSharedPreferences(MyPREFERENCES, Context.MODE_PRIVATE); 
     return sharedPreferences.getString(KEY1, null); 
    } 
}