Передача данных между activity android. Как организовать передачу данных из Service в Activity? Передача сложных объектов

Последнее обновление: 03.04.2018

Для передачи данных между двумя Activity используется объект Intent . Через его метод putExtra() можно добавить ключ и связанное с ним значение.

Например, передача из текущей activity в SecondActivity строки "Hello World" с ключом "hello":

// создание объекта Intent для запуска SecondActivity Intent intent = new Intent(this, SecondActivity.class); // передача объекта с ключом "hello" и значением "Hello World" intent.putExtra("hello", "Hello World"); // запуск SecondActivity startActivity(intent);

Для передачи данных применяется метод putExtra() , который в качестве значения позволяет передать данные простейших типов - String, int, float, double, long, short, byte, char, массивы этих типов, либо объект интерфейса Serializable.

Чтобы получить отправленные данные при загрузке SecondActivity, можно воспользоваться методом get() , в который передается ключ объекта:

Bundle arguments = getIntent().getExtras(); String name = arguments.get("hello").toString(); // Hello World

В зависимости от типа отправляемых данных при их получении мы можем использовать ряд методов объекта Bundle. Все они в качестве параметра принимают ключ объекта. Основные из них:

    get() : универсальный метод, который возвращает значение типа Object. Соответственно поле получения данное значение необходимо преобразовать к нужному типу

    getString() : возвращает объект типа String

    getInt() : возвращает значение типа int

    getByte() : возвращает значение типа byte

    getChar() : возвращает значение типа char

    getShort() : возвращает значение типа short

    getLong() : возвращает значение типа long

    getFloat() : возвращает значение типа float

    getDouble() : возвращает значение типа double

    getBoolean() : возвращает значение типа boolean

    getCharArray() : возвращает массив объектов char

    getIntArray() : возвращает массив объектов int

    getFloatArray() : возвращает массив объектов float

    getSerializable() : возвращает объект интерфейса Serializable

Пусть у нас в проекте будет определено две activity: MainActivity и SecondActivity.

В коде SecondActivity определим получение данных:

Package com.example.eugene.serializeapp; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.widget.TextView; public class SecondActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); TextView textView = new TextView(this); textView.setTextSize(20); textView.setPadding(16, 16, 16, 16); Bundle arguments = getIntent().getExtras(); if(arguments!=null){ String name = arguments.get("name").toString(); String company = arguments.getString("company"); int price = arguments.getInt("price"); textView.setText("Name: " + name + "\nCompany: " + company + "\nPrice: " + price); } setContentView(textView); } }

В данном случае в SecondActivity получаем все данных из объекта Bundle и выводим их в текстовое поле TextView. Предполагается, что данной activity будут передаваться три элемента - две строки с ключами name и company и число с ключом price.

Теперь определим передачу в SecondActivity данных. Например, определим для MainActivity следующий интерфейс в файле activity_main.xml :

Публикации по теме