java - 如何使用 SharedPreferences 检索已选择的照片

标签 java android

我需要一些帮助来将 SharedPreferences 与我选择的 getPhotos 结合起来。我是 SharedPreferences 的新手,有点不明白它是如何工作的。

所以我做了一个 SharedPreferencesManager:

public class SharedPreferencesManager {

    private static final String APP_PREFS = "AppPrefsFile";
    private static final String  PICK_IMAGE_MULTIPLE = "PickImageMultiple";

    private SharedPreferences sharedPrefs;
    private static SharedPreferencesManager instance;



    private SharedPreferencesManager(Context context) {
        sharedPrefs = context.getApplicationContext().getSharedPreferences(APP_PREFS, MODE_PRIVATE);
    }


    public static synchronized SharedPreferencesManager getInstance(Context context){
        if(instance == null)
            instance = new SharedPreferencesManager(context);

        return instance;
    }

    /* public int increaseClickCount() {
        int clickCount = sharedPrefs.getInt(NUMBER_OF_CLICKS, 0);
        clickCount++;
        SharedPreferences.Editor editor = sharedPrefs.edit();
        editor.putInt(NUMBER_OF_CLICKS, clickCount);
        editor.apply();
        return clickCount;
    } */

    public void putPhotos() {
        Intent intent = new Intent();
        intent.setType("image/*");
        //intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
        intent.setAction(Intent.ACTION_GET_CONTENT);
        SharedPreferences.Editor editor = sharedPrefs.edit();
        editor.apply();
    }

    public void getPhotos(){
         sharedPrefs.getInt(PICK_IMAGE_MULTIPLE, 0);
    }
}

我想要做的是将所有选定的照片存储在共享首选项中,以便每次我打开 Glide 时它都会显示所有选定的照片。但它不喜欢 imageUri = prefManager.getPhotos());

public class PhotosGallery extends AppCompatActivity {

    // Used to show glide load image.
    ImageView photoGallery;
    Uri imageUri;


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

        SharedPreferencesManager prefManager = SharedPreferencesManager.getInstance(PhotosGallery.this);

        photoGallery = findViewById(R.id.photo_gallery);

        if (getIntent() != null) {             
            imageUri = prefManager.getPhotos());
            Glide.with(PhotosGallery.this).load(imageUri).into(photoGallery);
        }else{
            Toast.makeText(PhotosGallery.this, "There are no images displayed", Toast.LENGTH_LONG).show();
        }


    }
}

我可以在重构 SharedPreferences 方面获得一些帮助吗?

最佳答案

看看你的方法:

public void getPhotos(){
    sharedPrefs.getInt(PICK_IMAGE_MULTIPLE, 0);
}

void - 表示不返回任何内容
int - 意味着您从首选项中读取了一个 int 值,但同样,您将其分配给任何内容。

通常,要从首选项获取号码,您应该编写如下内容:

int myNumber = sharedPrefs.getInt(NAME, 0);

如果你想在方法中使用它,那么,你应该:

public int getMyNumberFromPrefs(){
    return sharedPrefs.getInt(NAME, 0);
}

然后在其他地方:

int myNumber = prefManager.getMyNumberFromPrefs();

但是,如果您从首选项中读取 int 数字,则无法将其分配给 Uri 类型变量。

因此,您需要在首选项中存储一个字符串变量,然后从字符串中解析 Uri...

但这需要学习和练习一整章。

关于java - 如何使用 SharedPreferences 检索已选择的照片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51005429/

相关文章:

java - 部署 Spring-React-SQL Web 应用程序

java - 如何为 Java RCP 应用程序添加自定义弹出窗口,该应用程序仅在具有 java 7 或更高版本(32 位)时启动?

android - CursorLoaders 和 AsyncTaskLoaders 使用相同的 LoaderManager

java - 如何使用原生android像选框一样连续改变布局背景

java - 服务器启动时MyEclipse 2015 WebSphere 6.1 'Multiple problems have occurred'

java - CardLayout 不显示下一张卡

java - “发生Java异常” Apache POI错误

java - 在proguard中,如何保存一组类的方法名?

android - 获取有关 Android 应用程序的信息

android - canWrite() 到 SD 返回 false