How to make an object available for all actions in the Android program?

I have an application that consists of two actions / screens and a java class from which I create objects.

I need to use the object that I created in the first action (initializing the .java class) for the second action.

What is the easiest way to do this? I was looking for it, and implementing the Parcelable interface in a java class seems to be the most common answer to this problem. But the object is kind of complex and scattered, each member of it is presented as a brute force solution.

Is there an elegant solution for this?

thanks

EDIT: Does the object data store in a simple SQlite database solution?

+6
source share
3 answers

You can use the application context (although this basically stores the global state, so you need to be careful how you use it):

Using application context everywhere?

+3
source

One of the easiest ways to transfer information between actions is to use Bundles .

You can add more to the intent before starting a new action.

At the other end (another action), you can get these additional ones from the package and possibly rebuild the object in a new action.

Here is an example:

First of all, here is the Student Class:

Student class - Student.java:

package com.stephendiniz.objectsharing; public class Student { int id; String name; String profession; Student() { id = 0; name = ""; profession = ""; } Student(int id, String name, String profession) { this.id = id; this.name = name; this.profession = profession; } public int getId() { return id; } public String getName() { return name; } public String getProfession() { return profession; } } 

The main activity will reference the Student class to create the s object

The main activity is AndroidObjectSharing.java:

 package com.stephendiniz.objectsharing; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.TextView; public class AndroidObjectSharingActivity extends Activity { TextView id; TextView name; TextView profession; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); id = (TextView)findViewById(R.id.id); name = (TextView)findViewById(R.id.name); profession = (TextView)findViewById(R.id.profession); Button submitButton = (Button)findViewById(R.id.submitButton); submitButton.setOnClickListener(new View.OnClickListener() { final Intent newActivity = new Intent(AndroidObjectSharingActivity.this, NewActivity.class); public void onClick(View v) { Student s = new Student(Integer.parseInt(id.getText().toString()), name.getText().toString(), profession.getText().toString()); newActivity.putExtra("extraStudentId", s.getId()); newActivity.putExtra("extraStudentName", s.getName()); newActivity.putExtra("extraStudentProfession", s.getProfession()); startActivity(newActivity); } }); } } 

Here's the XML attached to the student class:

The main XML layout is main.xml:

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Student ID:" /> <EditText android:id="@+id/id" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="9001" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Student Name:" /> <EditText android:id="@+id/name" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Steve" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Student Profession:" /> <EditText android:id="@+id/profession" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Computer Engineer" /> <Button android:id="@+id/submitButton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_marginTop="30dp" android:text="Send to New Activity" /> </LinearLayout> 

Note that NewActivity refers to information from the Bundle (called infoBundle in this case).

The object is "rebuilt" programmatically, as if it were transferred.

New Activity - NewActivity.java:

 package com.stephendiniz.objectsharing; import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.LinearLayout; import android.widget.TextView; public class NewActivity extends Activity { LinearLayout ll; TextView id; TextView name; TextView profession; private final static String TAG = "NewActivity"; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Bundle infoBundle = getIntent().getExtras(); Student s = new Student(infoBundle.getInt("extraStudentId"), infoBundle.getString("extraStudentName"), infoBundle.getString("extraStudentProfession")); ll = new LinearLayout(this); ll.setOrientation(LinearLayout.VERTICAL); id = new TextView(this); name = new TextView(this); profession = new TextView(this); id.setText("Student Id: " + s.getId() + "\n"); name.setText("Student Name: " + s.getName() + "\n"); profession.setText("Student Profession: " + s.getProfession() + "\n"); ll.addView(id); ll.addView(name); ll.addView(profession); Button closeButton = new Button(this); closeButton.setText("Close Activity"); closeButton.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { finish(); } }); ll.addView(closeButton); setContentView(ll); } } 

Remember to add new activity to your manifest!

Android Manifest - AndroidManifest.xml:

 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.stephendiniz.objectsharing" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="15" /> <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" > <activity android:name=".AndroidObjectSharingActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".NewActivity" android:label="New Activity" /> </application> </manifest> 

Sorry for the combination of XML and program scripts, after the first step I realized that there will be many files to display, so I configured the last file, but you can get this idea.

Hope this helps!

+2
source

I think Singleton is the right way to create an object that is accessible in all actions. See this answer for more information on how this works.

0
source

Source: https://habr.com/ru/post/906245/


All Articles