【问题标题】:Change image via shared preferance from one activity to another android通过共享偏好将图像从一个活动更改为另一个 android
【发布时间】:2017-09-25 06:55:06
【问题描述】:

我已经在我的应用程序中实现了来自图库的图像选择器选项。从图库中选择图像并从相机拍照后,我将其保留在共享偏好中,以便用户在再次返回此活动时可以看到该图像。现在我想在另一个活动中使用该图像。但我不知道如何将 imagr 从该片段类传递给主要活动。

这是我的图像选择器代码并将其保存在共享首选项中。

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);
    }
}

这是另一个我想使用 sharedprefenace 查看该图像的活动

编辑的代码

    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

    }

【问题讨论】:

  • 尝试与您在 ViewProfileFragment 活动 SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this); String mImageUri = preferences.getString("image", null); @tamrezh21 中所做的相同
  • 您不需要将图像传递给另一个活动,只需执行与从 SharedPreference 获取图像相同的操作即可。
  • @VikasTiwari 我在主选项中编辑了代码,但我仍然没有得到任何图片

标签: android image android-intent sharedpreferences android-imageview


【解决方案1】:

由于您将其存储在首选项中,因此您可以通过上面 cmets 中提到的首选项访问它。

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

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

致谢@vikas-tiwari

【讨论】:

  • 我已经编辑了代码,但在 MainOptionPage 中没有看到更新的图像
  • 因为您需要一种刷新图像的方法。公开您的 loadNavHeader() 方法,在您的片段内将您的 getActivity () 转换为主要活动,如下所示:if (getActivity() instanceof MainAcitivty){ ((MainAcitivity)getActivity()).loadNavHeader()} 当它在片段中更改时,它将更新活动中的图像。将新图像的uri保存在首选项中后不要忘记添加它
  • 感谢您的回答。它正在工作,我会更新问题。
  • 我很高兴它成功了。 @VikasTiwari 你最初回答了它,你值得称赞。
【解决方案2】:

正如您已经建议的那样,您可以使用共享来访问图像。
我给您的建议是创建一个类,您可以在其中创建共享首选项并随时检索实例。
示例:

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);
    }
}

【讨论】:

    猜你喜欢
    • 2011-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-28
    • 1970-01-01
    相关资源
    最近更新 更多