переносить объект между действиями - PullRequest
0 голосов
/ 16 ноября 2011

Я пытаюсь проанализировать объект из моей основной деятельности в новую активность, которая начинается, когда пользователь нажимает кнопку. Я нашел Интернет и нашел, как анализировать примитивные типы и пользовательские классы, которые реализуют parceble или serilizable, но не могу найти никакой информации о том, как передать необработанный объект.

Я напишу псевдо-код того, что я пытаюсь достичь ниже:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    loadConnectInfo();
    View connectButton = findViewById(R.id.connectButton);
    connectButton.setOnClickListener(this);
}

public void onClick(View v) {
    switch (v.getId()) {
        case R.id.connectButton:
            Intent i = new Intent(this, NewClass.class);
            Socket s = connect();  // this is the object I want to parse to to "NewClass"
            startActivity( i);
            break;
    }

Ответы [ 3 ]

1 голос
/ 16 ноября 2011

Таким способом нельзя передать объект, который нельзя ни сериализовать, ни разложить между действиями. В этом случае вы, вероятно, захотите сделать так, чтобы ваш код управлял сокетом и взаимодействовал с ним в сервисе, а затем связывался с этим сервисом во всех действиях, в которых он требуется.

1 голос
/ 16 ноября 2011

Иногда, когда мне приходилось передавать переменные из одного класса в другой, я использовал статические переменные в классе, которые я доставляю некоторым объектам.Это будет работать, но это не рекомендуемый способ передачи объекта в Android, и у вас нет гарантии, которая будет работать всегда. .Здесь вы должны проверить, если ваш доставленный объект не является нулевым, конечно.

public void onClick(View v) {
    switch (v.getId()) {
        case R.id.connectButton:
            Intent i = new Intent(this, NewClass.class);
            Socket s = connect();  // this is the object I want to parse to to "NewClass"
            //Here using static field of class you pass variable to NewClass
            //You can access this value in NewClass like that: NewClass.StaticSocket
            //Warning: This is not a standar android scheme but I tested and it works
            //with Date object
            NewClass.StaticSocket = s;
            startActivity( i);
            break;
    }

При втором действии:

public void onCreate(Bundle savedInstanceState) {
        Log.i("StaticVar","NewClass.StaticSocket: "+ NewClass.StaticSocket.toString());
0 голосов
/ 16 ноября 2011

Уже есть другие посты по этому поводу:

Каков наилучший способ обмена данными между действиями?

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

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