保存活动(A)中的数据并读取另一个活动(历史记录)

时间:2011-03-30 19:07:43

标签: android

我有一个包含数据列表的活动(TextView),我需要保存已经在列表中选择(onClick)的数据,并且能够在另一个活动中获取和读取它(历史记录)

据我所知,“序列化”存在一种可能性,但我没有成功理解它对我的帮助。

如果有人可以为我澄清这个问题,我会很高兴吗?。

谢谢你的帮助!!

5 个答案:

答案 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传递给其他活动,可以使用putExtragetStringExtra执行此操作:

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)

您可以通过各种方式在活动之间共享数据,具体取决于您需要保存的数据量以及需要保存数据的时间。

  1. 意图:在2-3个屏幕之间传输少量数据时很有用
  2. 单例/静态数据存储类:在各种活动之间共享大量数据时非常有用
  3. SQLite数据库:要共享的大量数据,也可用于在应用启动之间保存相同内容
  4. 共享偏好设置:应用启动之间的少量数据。
  5. 对于您的用例,最好使用意图,除非数据在超过2-3个活动之间共享,其中选项2将是更好的解决方案