Лучший способ передавать данные между действиями в Android - PullRequest
2 голосов
/ 22 июня 2011

В моем приложении я извлекаю данные из JavaScript, так как невозможно вернуть данные в виде массива или объекта, я возвращаю их в виде строки.

Теперь для организации данных я создаю класс, который содержит ArrayList s и другие строковые переменные, а затем я создаю массив переменных моих объектов класса для хранения нескольких записей.

public class Data {

    ArrayList<String> m_empArrayList = new ArrayList();
    ArrayList<String> m_depArrayList = new ArrayList();
    String m_time;
    String m_duration;

}

Data d = new Data();

Что было бы хорошим подходом для передачи данных между видами деятельности?Поскольку Intent s и ShredPrefrence s используются для передачи небольших единиц данных, я не рассматриваю это здесь.

Ответы [ 2 ]

7 голосов
/ 22 июня 2011

Реализуйте интерфейс Parcelable в вашем пользовательском объекте и передайте его через Intent.

Вот пример Parcelable объекта.

public class MyObject implements Parcelable {

    private String someString = null;
    private int someInteger = 0;

    public MyObject() {
        // perform initialization if necessary
    }

    private MyObject(Parcel in) {
        someString = in.readString();
        someInteger = in.readInt();
    }

    public static final Parcelable.Creator<MyObject> CREATOR =
            new Parcelable.Creator<MyObject>() {

        @Override
        public MyObject createFromParcel(Parcel source) {
            return new MyObject(source);
        }

        @Override
        public MyObject[] newArray(int size) {
            return new MyObject[size];
        }

    };

    // Getters and setters

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(someString);
        dest.writeInt(someInteger);
    }

}

Вот что происходит. Если вы реализуете интерфейс Parcelable, вы должны создать приватный конструктор, который принимает Parcel в качестве параметра. Это Parcel содержит все сериализованные значения.

Вы должны реализовать вложенный класс Parcelable.Creator с именем CREATOR, так как он будет вызываться Android при воссоздании вашего объекта.

Метод describeContents() используется только в особых случаях. Вы можете оставить все как есть с возвращаемым значением 0.

Интересное действие происходит в writeToParcel(), где вы, как следует из названия, записываете свои данные в Parcel объект.

Теперь вы можете просто добавить свой пользовательский объект непосредственно в Intent, как в этом примере.

MyObject myObject = new MyObject();
Intent i = new Intent();
i.setExtra("MY_OBJECT", myObject);
// implicit or explicit destination declaration
startActivity(i);
3 голосов
/ 22 июня 2011

вы можете использовать Класс приложения , присутствующий в Android, для передачи данных между действиями.

вот хорошая ссылка .. http://www.helloandroid.com/tutorials/maintaining-global-application-state

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