Пакет для Android с примером

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

Известно, что Intents используются в Android для передачи данных от одного действия к другому. Но есть еще один способ, который можно использовать для передачи данных от одного действия другому лучше и с меньшим пространством кода, то есть с помощью Bundles в Android. Пакеты Android обычно используются для передачи данных от одного действия к другому. В основном здесь используется концепция пары ключ-значение, когда данные, которые нужно передать, являются значением карты, которое позже можно получить с помощью ключа. Пакеты используются с намерением, а значения отправляются и извлекаются таким же образом, как это делается в случае с намерением. Это зависит от пользователя, какой тип значений он хочет передать, но пакеты могут содержать все типы значений (int, String, boolean, char) и передавать их новому действию.

Ниже приведены основные типы, которые передаются / извлекаются в / из Bundle:

putInt(String key, int value), getInt(String key, int value)

putString(String key, String value), getString(String key, String value)

putStringArray(String key, String[] value), getStringArray(String key, String[] value)

putChar(String key, char value), getChar(String key, char value)

putBoolean(String key, boolean value), getBoolean(String key, boolean value)

Использование пакета в приложении для Android

Пакет всегда используется с Intent в Android. Теперь, чтобы использовать Bundle, запишите приведенный ниже код в MainActivity.

Джава

// creating a intent
Intent intent = new Intent( this , SecondActivity. class );
// creating a bundle object
Bundle bundle = new Bundle();
// storing the string value in the bundle
// which is mapped to key
bundle.putString( "key1" , "GFG :- Main Activity" );
// passing the bundle into the intent
intent.putExtras(bundle);
// starting the intent
startActivity(intent);

Котлин

// creating the instance of the bundle
val bundle = Bundle()
// storing the string value in the bundle
// which is mapped to key
bundle.putString( "key1" , "Gfg :- Main Activity" )
// creating a intent
intent = Intent( this @MainActivity , SecondActivity:: class .java)
// passing a bundle to the intent
intent.putExtras(bundle)
// starting the activity by passing the intent to it.
startActivity(intent)

Теперь создайте еще одно пустое действие с именем SecondActivity. Теперь, чтобы получить данные, хранящиеся в Bundle, напишите следующий код в SecondActivity.

Java

// getting the bundle back from the android
Bundle bundle = getIntent().getExtras();
 
// getting the string back
String title = bundle.getString("key1", "Default");

Kotlin

// getting the bundle back from the android
val bundle = intent.extras
 
// performing the safety null check
var s:String? = null
 
// getting the string back
s = bundle!!.getString("key1", "Default"))

В качестве альтернативы, если кто-то также не хочет использовать значение по умолчанию, это можно сделать, но помните, что это вызывает исключение.

For eg: boolean b = bundle.getBoolean(“pass the key here”);

Если не существует сопоставления, соответствующего ключу, это может привести к исключению NullPointerException. Следовательно, рекомендуется добавить значения по умолчанию для Bundle.

Пример

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

  1. Щелкните Файл, затем Новый => Новый проект.
  2. Выберите Пустое действие
  3. Выберите язык как Java / Kotlin
  4. Выберите минимальный SDK в соответствии с вашими потребностями.

Шаг 2. Работа с файлом activity_main.xml

Теперь добавьте две кнопки в приложение, одна кнопка будет передавать данные, которые хранятся в пакете, а другая кнопка будет передавать пустой пакет, т.е. очистить пакет с помощью bundle.clear (), а затем передать пакет в Intent. Полный код файла activity_main.xml приведен ниже. Здесь видно, что первая кнопка используется для передачи непустого пакета, а вторая кнопка используется для передачи пустого пакета.

XML

<? xml version = "1.0" encoding = "utf-8" ?>
< androidx.constraintlayout.widget.ConstraintLayout
android:layout_width = "match_parent"
android:layout_height = "match_parent"
android:padding = "10dp"
tools:context = ".MainActivity" >
< Button
android:id = "@+id/btnPassBundles"
android:layout_width = "275dp"
android:layout_height = "101dp"
android:layout_marginTop = "250dp"
android:text = "Pass Data Into Bundle"
android:textSize = "24sp"
app:layout_constraintHorizontal_bias = "0.498"
app:layout_constraintLeft_toLeftOf = "parent"
app:layout_constraintRight_toRightOf = "parent"
app:layout_constraintTop_toTopOf = "parent" />
< Button
android:id = "@+id/btnNoPassBundle"
android:layout_width = "277dp"
android:layout_height = "92dp"
android:layout_marginBottom = "220dp"
android:layout_marginTop = "75dp"
android:text = "Pass No Data/Empty BUNDLE"
android:textSize = "24sp"
app:layout_constraintBottom_toBottomOf = "parent"
app:layout_constraintLeft_toLeftOf = "parent"
app:layout_constraintRight_toRightOf = "parent"
app:layout_constraintTop_toBottomOf = "@+id/btnPassBundles" />
</ androidx.constraintlayout.widget.ConstraintLayout >

Шаг 3. Создайте другое действие и назовите его SecondActivity.

Теперь создайте еще одно пустое действие с именем SecondActivity. Следуйте процедуре, показанной на изображении ниже, чтобы создать другое действие.

Шаг 4. Работа с файлом activity_second.xml

В этом файле добавьте TextView для отображения текста в SecondActivity.

XML

<? xml version = "1.0" encoding = "utf-8" ?>
< androidx.constraintlayout.widget.ConstraintLayout
android:layout_width = "match_parent"
android:layout_height = "match_parent"
tools:context = ".SecondActivity" >
< TextView
android:id = "@+id/txtString"
android:layout_width = "wrap_content"
android:layout_height = "wrap_content"
android:layout_marginTop = "348dp"
android:text = "String from MainActivity"
android:textSize = "40sp"
android:textStyle = "bold"
android:gravity = "center"
android:textColor = "#008000"
app:layout_constraintHorizontal_bias = "0.428"
app:layout_constraintLeft_toLeftOf = "parent"
app:layout_constraintRight_toRightOf = "parent"
app:layout_constraintTop_toTopOf = "parent" />
</ androidx.constraintlayout.widget.ConstraintLayout >

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

Полный код MainActivity приведен ниже. Комментарии добавляются для облегчения понимания кода.

Джава

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
Button btnPassBundles, btnNoPassBundle;
@Override
protected void onCreate(Bundle savedInstanceState) {
super .onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnPassBundles = findViewById(R.id.btnPassBundles);
btnNoPassBundle = findViewById(R.id.btnNoPassBundle);
// one button will pass the bundle and other button
// will not pass the bundle
btnPassBundles.setOnClickListener( this );
btnNoPassBundle.setOnClickListener( this );
}
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.btnPassBundles:
// creating a bundle instance
Bundle bundle = new Bundle();
// passing the data into the bundle
bundle.putString(
"key1" ,
"Passing Bundle From Main Activity to 2nd Activity" );
Intent intent = new Intent(MainActivity. this , SecondActivity. class );
// passing the bundle to the intent
intent.putExtras(bundle);
// starting the activity by passing the intent
// to it.
startActivity(intent);
break ;
case R.id.btnNoPassBundle:
bundle = new Bundle();
bundle.putString(
"key1" ,
"Not passing Bundle From Main Activity" );
// clearing the data stored into the bundle
bundle.clear();
// passing the intent to the second activity
intent = new Intent(MainActivity. this , SecondActivity. class );
intent.putExtras(bundle);
startActivity(intent);
break ;
}
}
}

Котлин

import android.content.Intent
import android.os.Bundle
import android.view.View
import android.widget.Button
import androidx.appcompat.app.AppCompatActivity
class MainActivity : AppCompatActivity(), View.OnClickListener {
var btnPassBundles: Button? = null
var btnNoPassBundle: Button? = null
override fun onCreate(savedInstanceState: Bundle?) {
super .onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
btnPassBundles = findViewById(R.id.btnPassBundles)
btnNoPassBundle = findViewById(R.id.btnNoPassBundle)
// one button will pass the bundle and other button
// will not pass the bundle
btnPassBundles?.setOnClickListener( this )
btnNoPassBundle?.setOnClickListener( this )
}
override fun onClick(view: View) {
when (view.id) {
R.id.btnPassBundles -> {
// creating the bundle instance
val bundle = Bundle()
// passing the data into the bundle
bundle.putString( "key1" , "Passing Bundle From Main Activity to 2nd Activity" )
val intent = Intent( this @MainActivity , SecondActivity:: class .java)
intent.putExtras(bundle)
startActivity(intent)
}
R.id.btnNoPassBundle -> {
val bundle = Bundle()
bundle.putString( "key1" , "Not passing Bundle From Main Activity" )
// clearing the bundle
bundle.clear()
// passing the intent to the second activity
intent = Intent( this @MainActivity , SecondActivity:: class .java)
// passing the bundle into the intent
intent.putExtras(bundle)
startActivity(intent)
}
}
}
}

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

Полный код для SecondActivity приведен ниже. Комментарии добавляются для облегчения понимания кода.

Джава

import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;
public class SecondActivity extends AppCompatActivity {
TextView txtString;
@Override
protected void onCreate(Bundle savedInstanceState) {
super .onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
txtString = findViewById(R.id.txtString);
// getting the bundle from the intent
Bundle bundle = getIntent().getExtras();
// setting the text in the textview
txtString.setText(bundle.getString( "key1" , "No value from the MainActivity" ));
}
}

Котлин

import android.os.Bundle
import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity
class SecondActivity : AppCompatActivity() {
var txtString: TextView? = null
override fun onCreate(savedInstanceState: Bundle?) {
super .onCreate(savedInstanceState)
setContentView(R.layout.activity_second)
txtString = findViewById(R.id.txtString)
txtBoolean = findViewById(R.id.txtBoolean)
// getting the bundle from the intent
val bundle = intent.extras
// setting the text in the textview
txtString?.setText(bundle!!.getString( "key1" , "No value from MainActivity :(" ))
}
}


Выход: запустить на эмуляторе

Хотите более динамичную и конкурентную среду для изучения основ Android?
Щелкните здесь, чтобы перейти к уникальному руководству, составленному нашими экспертами с целью мгновенно подготовить вашу отрасль!