2016-03-17 11 views
0

У меня после Class и я хочу, чтобы сделать его Parcelable Проблемы заключается в том, что, когда я прочитал isHidden and Counter переменные из int[] arraySongIntegers метода in.createIntArray(), я получаю пустой массив размера 0 и BTW все переменные строковый быть правильно читать. Скажите, пожалуйста, как мне написать все переменные в Parcel и правильно прочитать их.Как сделать класс с несколькими целыми и строковыми параметрами?

public class Song implements Parcelable{ 
    public static long firstSongId; 
    private long id; 
    private String title ,mimeType, artist , dateAdded ,album; 
    private int isHidden ,counter; // 0 is false , 1 is true 

public Song(Parcel in){ 
    readFromParcel(in); 
} 

@Override 
public void writeToParcel(Parcel dest, int flags) { 
    int[] arraySongIntegers = new int[2]; 
    arraySongIntegers[0] = isHidden; 
    arraySongIntegers[1] = counter; 
    dest.writeIntArray(arraySongIntegers); 


    dest.writeLong(id); 

    List<String> l = new ArrayList<>(); 
    l.add(title); 
    l.add(artist); 
    l.add(album); 
    l.add(dateAdded); 
    dest.writeStringList(l); 

} 


public void readFromParcel(Parcel in){ 

    id = in.readLong(); 

    int[] arraySongIntegers = in.createIntArray(); 
    isHidden = arraySongIntegers[0]; 
    counter = arraySongIntegers[1]; 

    ArrayList<String> list = in.createStringArrayList(); 
    title = list.get(0); 
    artist = list.get(1); 
    album = list.get(2); 
    dateAdded = list.get(3); 
} 

public static final Parcelable.Creator CREATOR = 
     new Parcelable.Creator() { 
      public Song createFromParcel(Parcel in) { 
       return new Song(in); 
      } 

      public Song[] newArray(int size) { 
       return new Song[size]; 
      } 
     }; 

}

Спасибо заранее.

+1

Зачем вы пишете его как массив, а не как индивидуальный ints? –

ответ

2

В дополнение к моему комментарию (нет причин, чтобы сделать его массивом) - вам нужно прочитать все в том порядке, в котором вы его пишете. Читая сначала идентификатор, все становится испорченным.

+0

спасибо. Я не знал, что порядок действительно имеет значение. –

+0

Да, подумайте об этом как об потоке байтов - это не совсем реализация (он пишет некоторые другие данные), но его достаточно близко. –

1

Просто используйте: http://www.parcelabler.com

Вставить имя класса + переменные в левое текстовое поле, нажмите построить и он будет производить правильный код для вас.

Например, если у меня есть класс с именем MyClass с 2 строками и 1 целое число, я бы поместить этот код в текстурах:

public class myClass 
{ 
    private String s1; 
    private String s2; 
    private int n1; 
} 
0

Вы можете использовать Bundle для сохранения пары ключ/значение в посылке. Для этого используйте метод Parcel#writeBundle. Как в этом примере:

public void writeToParcel(Parcel parcel, int i) { 
    Bundle data = new Bundle(); 
    data.putInt("id",id); 
    data.putInt("year",year); 
    parcel.writeBundle(data); 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^