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
}
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
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
@VikasTiwari J'ai modifié le code dans l'option principale, mais je n'ai toujours pas obtenu d'image – tamrezh21