Как отправить данные из одного действия во второе действие в Android?
Эта статья призвана рассказать и показать, как «отправлять данные из одного действия во второе с помощью 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" ?> 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" ?> 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 } } |