Как хранить и извлекать arraylist с данными массива байтов из общих настроек?

#android

#Android

Вопрос:

  • Я пытаюсь сохранить данные массива байтов в arraylist, которые отлично работали как,

                 SharedPreferences sPrefs=PreferenceManager.getDefaultSharedPreferences(FirstActivity.this);
                SharedPreferences.Editor sEdit=sPrefs.edit();
    
                for(int i=0;i<byteArrayList.size();i  )
                {
                    sEdit.putString("val" i,byteArrayList.get(i).toString());
                }
                sEdit.putInt("size",byteArrayList.size());
                sEdit.commit();
      
  • Я извлекаю данные массива байтов, используя,

         SharedPreferences sPrefs = PreferenceManager.getDefaultSharedPreferences(ViewImagesActivity.this);
    
        myAList=new ArrayList<byte[]>();
        int size=sPrefs.getInt("size",0);
    
        for(int j=0;j<size;j  )
        {
            myAList.add(sPrefs.getString("val" j,"")); // giving error for type mismatch for byte[] and string
    
    
        }
      
  • пожалуйста, помогите мне разобраться в этой проблеме..
  • пожалуйста, скажите мне, есть ли какой-либо другой способ сохранения и извлечения для этого.
  • Заранее благодарю вас

Ответ №1:

попробуйте приведенный ниже код:-

 myAList.add(sPrefs.getString("val" j,null).getBytes(Charset.forName("UTF-8")));
  

Отображается ошибка, поскольку тип списка массива байтового массива

  myAList=new ArrayList<byte[]>();
  

и вы добавляете значение string, поэтому выдает вашу ошибку.

Комментарии:

1. выдает эту ошибку: метод add(byte[]) в типе ArrayList<byte[]> неприменим для аргументов (String)

2. @user3707205 измените строку на массив байтов

3. У меня есть решение, брат.. Спасибо за вашу любезную помощь также … спасибо

Ответ №2:

Вы пытаетесь сохранить String в списке Byte типов:

 myAList.add(sPrefs.getString("val" j,)); 
  

Вы можете использовать int вместо Byte . Существует стандартный метод putInt и getInt для хранения и извлечения данных в SharedPreferences

Комментарии:

1. Необходимо ли использовать массив байтов? Можете ли вы вместо этого использовать массив int?

Ответ №3:

Вы должны вызвать add метод с byte[] параметром. Обратная операция выполняется с String.getBytes помощью метода, поэтому измените соответствующую строку вашего кода:

 myAList.add(sPrefs.getString("val" j,"").getBytes());
  

Комментарии:

1. Ответ был помечен как низкое качество. Возможно, вы могли бы объяснить, как / почему код работает, чтобы гарантировать, что он не удален.

2. О, низкое качество? Тот, кто задает вопрос, поблагодарил меня за то, что он работает, и только за то, что я не был подробным в моем ответе, вы говорите, что это низкое качество? : D