java - 从另一个 Activity 的共享首选项获取字符串集

标签 java android sharedpreferences

我可以将字符串集放入 SharedPreferences 中。但当我试图挽回时,我却做不到。

我得到的设置大小为 0

这是我的保存代码====>

公共(public)类 DefineProduct 扩展 AppCompatActivity {

EditText productName, barcode,cost,price,size,color,notes;
Button saveBtn;
SharedPreferences sharedPref;
SharedPreferences.Editor editor ;
Set<String> set = new HashSet<>();


@SuppressLint("CommitPrefEdits")
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_define_product);

    sharedPref = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
    editor = sharedPref.edit();

    productName = findViewById(R.id.productNameText);
    barcode = findViewById(R.id.barcodeEditText);
    cost = findViewById(R.id.costText);
    price = findViewById(R.id.priceText);
    size = findViewById(R.id.sizeText);
    color = findViewById(R.id.colorText);
    notes = findViewById(R.id.notesText);
    saveBtn = findViewById(R.id.saveBtn);

}

public void Save(View view){

    set.add(productName.getText().toString());
    set.add(barcode.getText().toString());
    set.add(cost.getText().toString());
    set.add(price.getText().toString());
    set.add(size.getText().toString());
    set.add(color.getText().toString());
    set.add(notes.getText().toString());

    editor.putStringSet(barcode.getText().toString(),set);
    editor.commit();
    Toast.makeText(getApplicationContext(),"Saved", Toast.LENGTH_LONG).show();

    productName.setText("");
    barcode.setText("");
    cost.setText("");
    price.setText("");
    size.setText("");
    color.setText("");
    notes.setText("");
    set.clear();

}

}

这是我从其他 Activity 获取 StringSet 的代码 =====>

public void onActivityResult(int requestCode,int resultCode, Intent data) {

    IntentResult result = IntentIntegrator.parseActivityResult(requestCode,resultCode,data);


    if(islem == 1 && resultCode == RESULT_OK && data != null){

        Uri uri = data.getData();
        try {

            if(Build.VERSION.SDK_INT >= 28){

                ImageDecoder.Source source = ImageDecoder.createSource(this.getContentResolver(), uri);
                productImage = ImageDecoder.decodeBitmap(source);
                productImageVeawer.setImageBitmap(productImage);
                productImage.compress(Bitmap.CompressFormat.PNG, 10, byteArrayOutputStream);
            }

            else {
                productImage = MediaStore.Images.Media.getBitmap(this.getContentResolver(), uri);
                productImageVeawer.setImageBitmap(productImage);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    if(islem == 0 && resultCode == RESULT_OK && data != null){

        Bitmap bitmap = (Bitmap) data.getExtras().get("data");
        productImageVeawer.setImageBitmap(bitmap);
        bitmap.compress(Bitmap.CompressFormat.PNG, 10, byteArrayOutputStream);

        }

    if(islem == 2){

        SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
        System.out.println("Scan result : " + result.getContents().toString());
        Set<String> set = pref.getStringSet(result.getContents().toString(), new HashSet<String>());
        System.out.println("***************************** Set size : " + set.size());

        ArrayList<String> arrayList = new ArrayList<>();
        arrayList.addAll(set);

//BarcodeText.setText(arrayList.get(0).toString()); //productNameText.setText(arrayList.get(1).toString());

    }
    super.onActivityResult(requestCode,resultCode, data);
}

最佳答案

用这个

SharedPreferences sharedPref;
SharedPreferences.Editor editor ;
Set<String> set = new HashSet<>();

@SuppressLint("CommitPrefEdits")
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_define_product);

    sharedPref = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
    editor = sharedPref.edit();

}

public void Save(View view){
    editor.putStringSet(barcode.getText().toString(),set);
    editor.apply();
    Toast.makeText(getApplicationContext(),"Saved", Toast.LENGTH_LONG).show();
    set.clear();
}

并在另一个 Activity 中获取数据

public NameActivity extands AppCompactActivity{
SharedPreferences sharedPref;
SharedPreferences.Editor editor ;

@SuppressLint("CommitPrefEdits")
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_define_product);

    sharedPref = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());

    Set<String> fetch = sharePref.getStringSet(barcode.getText().toString(), null);
     }
}

关于java - 从另一个 Activity 的共享首选项获取字符串集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58713199/

相关文章:

java - UserDetailsS​​ervice中注入(inject)的HttpServletRequest不是过滤器添加的包装的HttpServletRequest吗?

java - 崩溃保存按钮切换状态

java - 如何在java中使用jmap分析堆转储

java - 在 Netbeans+Ant 中,如何避免 wsimport 在每次构建时重建 Web 服务客户端?

java - Java 中的 HttpPost 不接受过长的 url

java - 与列表位置和微调器位置进行比较

Android 单选按钮图片

java - 使用 SharedPreferences 获得离线高分 - Android (java)

java - 设置按钮在具有首选项设置的另一个 Activity 中可见

java - 如何在 Ant 中设置时间属性