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());

これまでのところ、First Name を取得できます。

ただし、別のアクティビティからこれらのデータにアクセスしようとすると、null が返されます。

2つの方法を試しましたが、nullが生成されます

最初の実装:

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

2 番目の実装:

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

データを永続化する方法と、他のアクティビティからデータを取得する方法はありませんか?

4

2 に答える 2

0

のみmInstanceが静的であることに注意してください。同じ物が届くことを保証するものではありませんpersonalDatapersonalData可能性があり、間違いなくnullあなたの場合です。

personalDatastatic として宣言することもできます。

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 に答える
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 に答える