Получение Stringset из общих преференций из другого действия - PullRequest
0 голосов
/ 05 ноября 2019

Я могу поместить Stringset в SharedPreferences. Но когда я пытаюсь получить обратно, я не могу.

Я получаю установленный размер 0

Это мой код для сохранения ====>

открытый класс DefineProduct extends 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();

}

}

Это мой код для получения 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);
}

Ответы [ 3 ]

0 голосов
/ 05 ноября 2019

Вы ставите пустой Set в предпочтение, вы должны добавить какое-то значение в Set и сохранить как показано ниже

set.add("Test"); 
editor.putStringSet(barcode.getText().toString(),set);
editor.apply(); // must apply the change
0 голосов
/ 05 ноября 2019

Не используйте PreferenceManager, используйте

SharedPreferences prefs = getApplicationContext.getSharedPreferences(FILENAME, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = prefs.edit();

Чтобы имя файла было легко запомнить, я использую имя пакета. Кроме того, убедитесь, что вы используете "" вокруг имени файла.

0 голосов
/ 05 ноября 2019

используйте это

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

и для извлечения данных в другой деятельности

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...