Передать аргумент параметру - PullRequest
0 голосов
/ 09 мая 2019

Я создал класс «Предмет», который реализует Parcelable, и установил его конструктор

public Item(Parcel in) {
    this.mName = in.readString();
    this.mFilePath = in.readString();
    this.mId = in.readInt();
    this.mLength = in.readInt();
    this.mTime = in.readLong();
}

Моя проблема в том, что когда я использую этот класс, я не знаю, что передать в параметре, например, ниже:

 Item item = new  Item(//What to put her!); 
    item.setId(c.getInt(c.getColumnIndex("_id")));
    item.setName(c.getString(c.getColumnIndex(DBHelperItem.COLUMN_NAME_RECORDING_NAME)));
    item.setFilePath(c.getString(c.getColumnIndex(DBHelperItem.COLUMN_NAME_RECORDING_FILE_PATH)));
    item.setLength(c.getInt(c.getColumnIndex(DBHelperItem.COLUMN_NAME_RECORDING_LENGTH)));
    item.setTime(c.getLong(c.getColumnIndex(DBHelperItem.COLUMN_NAME_TIME_ADDED))); 
return item;

Ответы [ 3 ]

0 голосов
/ 10 мая 2019

У вас может быть другой конструктор в классе предметов

public Item(mName,mFilepath,mId,mLength,mTime) {
    this.mName = mname;
    this.mFilePath = mFilepath;
    this.mId = mId;
    this.mLength = mLength;
    this.mTime = mTime;
}

В вашей активности Инициализируйте все поля в предмете

 int id=(c.getInt(c.getColumnIndex("_id")));
 String name =   
  (c.getString(c.getColumnIndex(DBHelperItem.COLUMN_NAME_RECORDING_NAME)));
 String filePath=     
  (c.getString(c.getColumnIndex(DBHelperItem.COLUMN_NAME_RECORDING_FILE_PATH)));
 int length=     
  (c.getInt(c.getColumnIndex(DBHelperItem.COLUMN_NAME_RECORDING_LENGTH)));
 double time =    
  (c.getLong(c.getColumnIndex(DBHelperItem.COLUMN_NAME_TIME_ADDED))); 

Теперь вы можете создать новый элемент, используя поля выше

Элемент элемента = новый элемент (идентификатор, имя, путь к файлу, длина, время);

Вот мой пример использования Parcelable: https://github.com/riyaza15/ParcelableDemoenter код здесь

0 голосов
/ 10 мая 2019

Item.java

public class Item {

    private String mName;
    private String mFilePath;
    private int mId;
    private int mLength;
    private long mTime;

    public Item(Parcel in) {
        this.mName = in.readString();
        this.mFilePath = in.readString();
        this.mId = in.readInt();
        this.mLength = in.readInt();
        this.mTime = in.readLong();
    }
}

Parcel.java (согласно тому, что мы видим из вашего кода, он должен содержать следующие методы)

public class Parcel {

    public String readString() {

        //read a string
        return null;
    }

    public int readInt() {

        //read an int
        return 0;
    }

    public long readLong() {

        //read a long
        return 0;
    }
}

Test.java (который вашнаходится основной метод)

public class Test {

    public static void main(String[] args) {


        Parcel p = new Parcel();

        /*Pass the parcel like this*/

        Item item = new Item(p);

        /*
         * 
         * Rest of the code
         * 
         * */
    }
}

Возможно, определения вашего метода отличаются от предоставленного кода.Вы должны изменить их соответственно.

0 голосов
/ 10 мая 2019

Parcel.writeStringArray

используйте Parcel.writeStringArray для связывания ваших строк, а затем вставьте их в конструктор

...