0

我从这个例子中尝试过 https://stackoverflow.com/a/9472019/485978

我有一个服务,这个服务直接连接到数据库,我把所有数据放在这个类中的一个 bean 中。

public class ServiceApplication extends Application {

  private static ServiceApplication mInstance;

  public ServiceApplication() {
    super();
  }

  public static ServiceApplication getInstance() {
    return mInstance;
  }

  @Override
  public void onCreate() {
    super.onCreate();
    mInstance = this;
  }

  private Person personalData;

  public Person getPersonalData() {
    return personalData;
  }

  public void setPersonalData(Person personalData) {
    this.personalData = personalData;
  }
}

从数据库中检索数据时,我使用了 AsyncTask,其中 doBackground() 这是代码

ServiceApplication.getInstance().setPersonalData(personalData);
Log.d("AndroidService", "First name: "+ ServiceApplication.getInstance().getPersonalData().getFirstName());

到目前为止,它可以检索到名字。

但是,当我尝试从另一个活动访问这些数据时,我得到的都是空的。

我尝试了两种方法,但它产生 null

第一次实现:

ServiceApplication app = (ServiceApplication) getApplication();
String name = (app.getPersonalData() != null) ? app.getPersonalData().getFirstName().trim() : "user";

第二种实现:

String name = (ServiceApplication.getInstance().getPersonalData() != null) ? ServiceApplication.getInstance().getPersonalData().getFirstName().trim() : "user";

你们不知道如何保存数据以及如何从其他活动中检索数据吗?

4

2 回答 2

0

如果您尝试在服务和活动之间传递数据,则必须使用另一种方法,如此所述。如果您只想将Person数据从数据库加载到单例中,那么您不需要Service. 只需打开与数据库的连接,读取数据并存储它。就像是:

...
public Person getPersonalData() {
  if(personalData == null) {
    ... open the db and load the data here ...
  }

  return personalData;
}
...
于 2013-02-28T03:22:50.383 回答
0

请注意,仅mInstance是静态的。它不保证您将收到相同的personalData对象。personalData可能而且绝对null是你的情况。

您可能还想声明personalData为静态的。

private static Person personalData;

但在这种情况下,您将在下次调用时重置数据setPersonalData

我建议您创建一个static structureas

private static ArrayList<Person> pList = new ArrayList<Person>();

然后在你的setPersonalData()你可以将对象添加到你的pList.

您可以更换您getPersonalData的退货pList。因此,您可以使用singleton活动中的相同实例将数据添加到列表并使用相同的实例来检索

于 2013-02-28T03:22:12.553 回答