Как отправить данные из одного действия во второе действие в Android?

Опубликовано: 11 Января, 2023

Эта статья призвана рассказать и показать, как «отправлять данные из одного действия во второе с помощью Intent». В этом примере у нас есть два действия: Activity_first — исходное действие и Activity_second — целевое действие. Мы можем отправить данные с помощью метода putExtra() из одного действия и получить данные из второго действия с помощью метода getStringExtra().

Pre-requisites:

  • Android App Development Fundamentals for Beginners
  • Guide to Install and Set up Android Studio
  • Android | Starting with the first app/android project
  • Android | Running your first Android app

Пример:

В этом примере для ввода текста используется один EditText. Этот текст отправляется второму действию при нажатии кнопки «Отправить». Для этого запустится Intent и будут запущены следующие методы:

  • Метод putExtra() используется для отправки данных, данные в ключе пары ключ -значение - это имя переменной, а значение может быть Int, String, Float и т. д.
  • Метод getStringExtra() предназначен для получения данных (ключа), отправленных вышеуказанным методом. в зависимости от типа данных значения существуют другие методы, такие как getIntExtra(), getFloatExtra()

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

Пошаговая реализация

Шаг 1. Создайте новый проект в Android Studio.

Чтобы создать новый проект в Android Studio, обратитесь к разделу «Как создать/запустить новый проект в Android Studio». Код для этого был предоставлен как на Java, так и на языке программирования Kotlin для Android. Это создаст файл XML и файл Java. Пожалуйста, ознакомьтесь с предварительными условиями, чтобы узнать больше об этом шаге.

Шаг 2: Работа с файлами XML

Далее переходим к файлу activity_main.xml , представляющему UI проекта. Ниже приведен код файла activity_main.xml . Комментарии добавляются внутри кода, чтобы понять код более подробно. Откройте файл «activity_first_activity.xml» и добавьте следующие виджеты в относительный макет .

  • EditText для ввода сообщения
  • Кнопка для отправки данных

Кроме того, назначьте идентификатор каждому компоненту вместе с другими атрибутами, как показано на изображении и в коде ниже. Назначенный идентификатор компонента помогает легко найти этот компонент и использовать его в файлах Java/Kotlin.

Синтаксис:

android:id="@+id/id_name"

Здесь заданы следующие идентификаторы:

  • Кнопка отправки: send_button_id
  • ввод EditText: send_text_id

XML




<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".first_activity">
  
    <EditText
        android:id="@+id/send_text_id"
        android:layout_width="300dp"
        android:layout_height="wrap_content"
        android:layout_marginLeft="40dp"
        android:layout_marginTop="20dp"
        android:hint="Input"
        android:textSize="25dp"
        android:textStyle="bold" />
  
    <Button
        android:id="@+id/send_button_id"
        android:layout_width="wrap_content"
        android:layout_height="40dp"
        android:layout_marginLeft="150dp"
        android:layout_marginTop="150dp"
        android:text="send"
        android:textStyle="bold" />
</RelativeLayout>

Это сделает пользовательский интерфейс приложения

Шаг 3: Работа с файлом MainActivity

Перейдите в файл MainActivity и обратитесь к следующему коду. Ниже приведен код файла MainActivity. Комментарии добавляются внутри кода, чтобы понять код более подробно. Теперь, после пользовательского интерфейса, этот шаг создаст серверную часть приложения. Для этого откройте файл «first_activity» и создайте экземпляры компонентов, созданных в файле XML (EditText, кнопка отправки), используя метод findViewById(). Этот метод привязывает созданный объект к компонентам пользовательского интерфейса с помощью назначенного идентификатора.

Синтаксис: Общий

ComponentType object = (ComponentType)findViewById(R.id.IdOfTheComponent);

Синтаксис: для используемых компонентов выглядит следующим образом:

Button send_button= findViewById(R.id.send_button_id); 
send_text = findViewById(R.id.send_text_id); 

Настройка операций отправки и получения данных.

Эти Операции заключаются в следующем:

Добавьте прослушиватель к кнопке отправки, и эта кнопка отправит данные.

Это делается следующим образом:

send_button.setOnClickListener(v -> {} 

после нажатия этой кнопки будет выполнена следующая операция

Теперь создайте переменную типа String для хранения значения EditText, которое вводит пользователь. Получите значение и преобразуйте его в строку.

Это делается следующим образом:

String str = send_text.getText().toString();

Теперь создайте объект Intent класса First_activity.java для класса Second_activity.

Это делается следующим образом:

Intent intent = new Intent(getApplicationContext(), Second_activity.class);

где getApplicationContext() будет получать текущую активность.

Поместите значение в метод putExtra в пару ключ-значение, затем запустите действие.

Это делается следующим образом:

intent.putExtra("message_key", str); 
startActivity(intent);

где «str» — строковое значение, а ключ — «message_key», этот ключ будет использовать для получения значения str.

Java




import android.content.Intent;
import android.os.Bundle;
import android.widget.Button;
import android.widget.EditText;
import androidx.appcompat.app.AppCompatActivity;
  
public class first_activity extends AppCompatActivity {
  
    // define the variable
    Button send_button;
    EditText send_text;
  
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_first_activity);
        
        send_button = findViewById(R.id.send_button_id);
        send_text = findViewById(R.id.send_text_id);
  
        // add the OnClickListener in sender button after clicked this button following Instruction will run
        send_button.setOnClickListener(v -> {
            // get the value which input by user in EditText and convert it to string
            String str = send_text.getText().toString();
            // Create the Intent object of this class Context() to Second_activity class
            Intent intent = new Intent(getApplicationContext(), Second_activity.class);
            // now by putExtra method put the value in key, value pair key is
            // message_key by this key we will receive the value, and put the string
            intent.putExtra("message_key", str);
            // start the Intent
            startActivity(intent);
        });
    }
}

Kotlin




import android.content.Intent
import android.os.Bundle
import android.widget.Button
import android.widget.EditText
import androidx.appcompat.app.AppCompatActivity
  
class first_activity : AppCompatActivity() {
      
    // define the variable
    lateinit var send_button: Button
    lateinit var send_text: EditText
  
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_first_activity)
          
        send_button = findViewById(R.id.send_button_id)
        send_text = findViewById(R.id.send_text_id)
  
        // add the OnClickListener in sender button after clicked this button following Instruction will run
        send_button.setOnClickListener {
            // get the value which input by user in EditText and convert it to string
            val str = send_text.text.toString()
            // Create the Intent object of this class Context() to Second_activity class
            val intent = Intent(applicationContext, Second_activity::class.java)
            // now by putExtra method put the value in key, value pair key is
            // message_key by this key we will receive the value, and put the string
            intent.putExtra("message_key", str)
            // start the Intent
            startActivity(intent)
        }
    }
}

Шаг 4: Создание Second_Activity для получения данных.

Шаги для создания второго действия следующие:

android project > File > new > Activity > Empty Activity 

Шаг 5: Работа со вторым файлом XML

Добавьте TextView для отображения полученных сообщений. присвойте идентификатор Textview.

XML




<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="org.geeksforgeeks.navedmalik.sendthedata.Second_activity">
  
    <TextView
        android:id="@+id/received_value_id"
        android:layout_width="300dp"
        android:layout_height="50dp"
        android:layout_marginLeft="40dp"
        android:layout_marginTop="20dp"
        android:textSize="40sp"
        android:textStyle="bold"
        android:layout_marginStart="40dp" />
</RelativeLayout>

Второе действие показано ниже:

Шаг 6: Работа с файлом SecondActivity

Определите переменную TextView, используйте findViewById(), чтобы получить TextView, как показано выше.

receiver_msg = (TextView) findViewById(R.id.received_value_id); 

Теперь в файле second_activity.java создайте объект getIntent для получения значения в переменной типа String методом getStringExtra с использованием message_key .

Intent intent = getIntent(); 
String str = intent.getStringExtra("message_key");

Полученное значение, установленное в объекте TextView второго XML-файла действия.

receiver_msg.setText(str);

Java




import android.content.Intent;
import android.os.Bundle;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
  
public class Second_activity extends AppCompatActivity {
  
    TextView receiver_msg;
  
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second_activity);
  
        receiver_msg = findViewById(R.id.received_value_id);
        // create the get Intent object
        Intent intent = getIntent();
        // receive the value by getStringExtra() method and 
        // key must be same which is send by first activity
        String str = intent.getStringExtra("message_key");
        // display the string into textView
        receiver_msg.setText(str);
    }
}

Kotlin




import android.os.Bundle
import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity
  
class Second_activity : AppCompatActivity() {
      
    lateinit var receiver_msg: TextView
  
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_second_activity)
          
        receiver_msg = findViewById(R.id.received_value_id)
        // create the get Intent object
        val intent = intent
        // receive the value by getStringExtra() method and
        // key must be same which is send by first activity
        val str = intent.getStringExtra("message_key")
        // display the string into textView
        receiver_msg.text = str
    }
}

Выход: