我有一个包含数据列表的活动(TextView),我需要保存已经在列表中选择(onClick)的数据,并且能够在另一个活动中获取和读取它(历史记录)
据我所知,“序列化”存在一种可能性,但我没有成功理解它对我的帮助。
如果有人可以为我澄清这个问题,我会很高兴吗?。
谢谢你的帮助!!
答案 0 :(得分:0)
是的,使用实现Serializable
的类。请参阅我对此问题的回答:How to pass several variables of different types from one function to another on android?
创建一些将保存数据的模型类:
public class Page implements Serializable {
private String name;
private String description;
//and so on...
public Page(String name, String description) {
this.name = name;
this.description = description;
}
public String getName() {
return name;
}
public String getDescription() {
return description;
}
}
现在,您可以创建一个Page
对象,并通过构造函数将其填入数据(名称,描述)。可选择制作一些制定者。
Page p = new Page("James", "Hello World");
startActivity(new Intent(context, MyActivity.class).putExtra("Page", p));
在Page
方法的MyActivity
中检索您的onCreate
:
Page p = (Page)getIntent().getExtras().getSerializable("Page");
Toast.makeText(this, "Name: " + p.getName() + ", Description:" + p.getDescription(), Toast.LENGTH_LONG).show();
答案 1 :(得分:0)
如果您尝试将String
传递给其他活动,可以使用putExtra
和getStringExtra
执行此操作:
Intent intent = new Intent(this, OtherActivity.class);
intent.putExtra("parameter", myStringParameter);
startActivity(intent);
然后在OtherActivity
的{{1}}方法中阅读:
onCreate
String parameter = getIntent().getStringExtra("parameter");
接口对于编组更复杂的对象非常有用;如果您只是处理Serializable
,则不需要这样做。
修改 - 如果您需要持久存储少量数据,可以使用SharedPreferences:
String
然后阅读首选项:
final String TAG = "MyApplication";
SharedPreferences prefs = getSharedPreferences(TAG, MODE_PRIVATE);
prefs.edit().putString("parameter", myStringParameter).commit();
即使申请结束,这些数据仍然可用。
答案 2 :(得分:0)
在活动(消息传递)之间发送不可变的有状态对象是值得称道的,恕我直言。可以说OOP是关于消息传递而不是对象。两个建议。 1)使用名称:值对的完全限定名称,所以:
private void launchManagePassword() {
Intent i= new Intent(this, ManagePassword.class); // no param constructor
PasswordState outState= new PasswordState(lengthKey,timeExpire,isValidKey,timeoutType,"",model.getIsHashPassword());
Bundle b= new Bundle();
b.putSerializable("jalcomputing.confusetext.PasswordState", outState);
i.putExtras(b);
startActivityForResult(i,REQUEST_MANAGE_PASSWORD); // used for callback
}
这将最大限度地减少运行时转换错误。
2)当你的应用程序运行良好且对象界面稳定时,请考虑将代码重构为Parcel以提高速度。
JAL
编辑:根据要求Code
答案 3 :(得分:0)
我知道上面提到的方法。但只是为了替代思想,因为你提到了历史词,那么如何使用SQLite来达到这个目的呢? 在第一个活动中,您可以保存数据,在第二个活动中,可以检索数据。
答案 4 :(得分:0)
您可以通过各种方式在活动之间共享数据,具体取决于您需要保存的数据量以及需要保存数据的时间。
对于您的用例,最好使用意图,除非数据在超过2-3个活动之间共享,其中选项2将是更好的解决方案