我是android studio的新手,正在研究意图。我正在创建一个注册应用程序,该应用程序会在前4个活动中获取用户信息,并在第5个活动的相应视图中完全显示它们。
我的应用具有个人,专业,地址和其他详细活动,可从编辑文本中检索这些活动,然后在最后一个屏幕上显示。
我只能在下一个连续的屏幕上检索数据,而不能保存它们,以后再添加到上一个活动中。
有什么方法可以仅使用两个彼此不连续的活动之间的意图来完成存储和检索部分吗?任何帮助将不胜感激... !!
答案 0 :(得分:2)
是的,您可以通过将一个活动中的数据发送到链中的另一个活动中来进行。
假设您的应用从 ActivityOne 开始,然后进入 ActivityTwo ,然后进入 ActivityThree ,然后进入 ActivityFour ,然后进入 ActivityFive ,然后在ActivityFive中提交数据。每个活动都有一个EditText输入数据,还有一个按钮,单击该按钮将转到下一个活动。
在 ActivityOne 中创建,然后在按钮单击上启动意图,即在onClick()内:
Intent i = new Intent(ActivityOne.this,ActivityTwo.class);
i.putExtra("Name",edittext.getText().toString());//get sting from 1st edittext
startActivity(i);
现在您的第二个活动已经开始,即 ActivityTwo 。
在该活动中,onCreate()方法创建一个Intent Intent a = getIntent();
现在在onClick方法中为此活动的按钮执行以下操作:
Intent i = new Intent(ActivityTwo.this,ActivityThree.class);
i.putExtra("Address",edittextTwo.getText().toString());//This line fetches the data from the activities edittext
i.putExtra("Name", a.getStringExtra("Name"));//This line fetches the data from the intent which called this activity.
startActivity(i);
现在进入已开始的第三项活动,即 ActivityThree 。
在活动onCreate()方法中执行相同的操作,即创建一个Intent Intent a = getIntent();
现在,在此活动按钮的onClick方法中,您可以执行与以前相同的操作,但还可以获取从上一个活动传递来的数据:
Intent i = new Intent(ActivityThree.this,ActivityFour.class);
i.putExtra("email",edittextThree.getText().toString());//This line fetches the data from the activity's edittext
i.putExtra("Name", a.getStringExtra("Name"));//This line fetches the data from the intent which called this activity.
i.putExtra("Address", a.getStringExtra("Address"));//This line fetches the data from the intent which called this activity.
startActivity(i);
在所有活动中继续进行此操作,最后您将能够获取最终活动中的所有数据。
这里的逻辑是将数据从一个活动传递到另一个活动,并继续在旅途中添加数据。
答案 1 :(得分:0)
我也是新手,但为什么不创建一个保存数据模型的活动,并在片段中收集UserInformation并将它们设置为nextBtnClick上的活动?
类似这样的东西:
# let's imagine that we have some meta history
history = db.Column(
CompositeArray(
CompositeType(
'history',
[
db.Column('message', db.Text),
]
)
)
# example of history type:
CREATE TYPE history AS (
message text
);
如果您有很多活动并将数据放入其中,这不是一个不好的设计吗? 如果要使用Fragments,则根活动可以保存所有数据,并且可以简化数据处理。
答案 2 :(得分:0)
You can use singleton class
Create one model class and add the data from that four activites
public class MySingleton {
private UserModel user_details;
private static MySingleton ourInstance = new MySingleton();
public static MySingleton getInstance() {
return ourInstance;
}
private MySingleton() {
}
public void setUserDetails(UserModel news) {
this.user_details= news;
}
public UserModel getUserDetails() {
return user_details;
}
}
//add user details
MySingleton mysingleton= MySingleton .getInstance();
mysingleton.setUserDetails(userdetails); // userdetails - model class object
答案 3 :(得分:0)
传递数据的方法有很多,一种简单有效的实现方法是在包中创建一个公共类,在该类中将您的值声明为静态,如下所示。
[Thread-8 (ActiveMQ-IO-server-org.apache.activemq.artemis.core.server.impl.ActiveMQServerImpl$4@6a8da5c5)] impl.JournalImpl.run - appendAddRecord::java.lang.IllegalArgumentException: Record is too large to store 18603342 {}
java.lang.IllegalArgumentException: Record is too large to store 18603342
at org.apache.activemq.artemis.core.journal.impl.JournalImpl.switchFileIfNecessary(JournalImpl.java:2915) ~[artemis-journal-2.2.0.jar:2.2.0]
at org.apache.activemq.artemis.core.journal.impl.JournalImpl.appendRecord(JournalImpl.java:2640) ~[artemis-journal-2.2.0.jar:2.2.0]
at org.apache.activemq.artemis.core.journal.impl.JournalImpl.access$200(JournalImpl.java:88) ~[artemis-journal-2.2.0.jar:2.2.0]
at org.apache.activemq.artemis.core.journal.impl.JournalImpl$1.run(JournalImpl.java:778) [artemis-journal-2.2.0.jar:2.2.0]
at org.apache.activemq.artemis.utils.actors.OrderedExecutor.doTask(OrderedExecutor.java:42) [artemis-commons-2.2.0.jar:2.2.0]
at org.apache.activemq.artemis.utils.actors.OrderedExecutor.doTask(OrderedExecutor.java:31) [artemis-commons-2.2.0.jar:2.2.0]
at org.apache.activemq.artemis.utils.actors.ProcessorBase$ExecutorTask.run(ProcessorBase.java:53) [artemis-commons-2.2.0.jar:2.2.0]
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) [?:1.8.0_181]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) [?:1.8.0_181]
at java.lang.Thread.run(Unknown Source) [?:1.8.0_181]
您可以传递如下值
public class MyDataClass {
public static String name;
public static String userid;
}
要从活动或片段的任何地方获取值,请使用
MyDataClass myobj=new MyDataClass();
myobj.name="Jhon";
myobj.username="Jhon@gmail.com";
答案 4 :(得分:0)
使用SharedPreference使用键值对保存数据。然后,您可以使用相应的键检索任何活动中的数据。只要确保使用正确的键来保存变量即可。
public SharedPreferences sharedPref;
public SharedPreferences.Editor editor;
sharedPref = getSharedPreferences("name_of_your_preference", Context.MODE_PRIVATE);
editor = sharedPref.edit();
editor.putString("key" , "value"); //use to save a value
editor.commit();
sharedPref.getString("key", null); // retrieve the data