2

次のアクティビティ/サービス/アプリケーションの組み合わせの例を教えてください。私は3つすべてを持っていますが、場所の周りにたくさんの変数を渡そうとしてアプリを混乱させてしまい、何が起こっているのかわかりません. 私はアンドロイドが初めてで、これを実装する方法はたくさんあるので、最近これに苦労していることに注意してください。

私は、アクティビティ、サービス、およびアプリケーションの 3 つのクラスが次のように発生することを確認したいと思います。

  • Activity は変数 x を Application に格納し、Service を起動して、Activity 2 を開始します。

  • Service は Application から変数 x を取得します。

  • アクティビティ 2 は、Application から変数 x を取得します。

変数 x は Int から ArrayList まで何でもかまいません。また、実際のプログラムには多くの変数があることに注意してください (したがって、アプリケーション クラスが必要です)。

しばらくの間、これらすべてを理解しようとしてきたので、この特定の例の良い例を本当に感謝しています。誰かがしっかりとした答えをまとめるために時間を割いてくれたら、私はそれを大いに感謝します.

理由を尋ねる人にとっては、すべてが音楽プレーヤーです。ユーザーが曲を選ぶと、アーティスト/アルバムなどが (できれば) アプリケーションに保存されます。次に、アプリケーションからソングパスを取得して、曲の再生を制御するサービスが開始されます。2 番目のアクティビティは、曲の情報 (これもアプリケーションから) を含む UI を表示し、アプリケーション内のいくつかの変数の値を変更して、サービスに新しい値を取得するように指示する次/前のボタンがあります。ユーザーが別の場所に移動した場合、変数はアプリケーション内に常に存在するため、別の UI を作成すると、曲の情報を簡単に設定できます。

正しいアプローチを使用していますか?

私が持っているものの例を提供できますが、現時点では混乱しています。とにかく、私を助けるのに役立つと思われる場合は、以下をリクエストしてください.

4

4 に答える 4

4

これを延長する必要はありませんApplication。次のように、一部のクラスで静的メンバー変数を使用できます。

public class Globals {
    public static String myVariable;
}

public class Activity1 extends Activity implements View.OnClickListener {
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        ...
    }

    public void onClick(View view) {
        // Save song name and stuff
        Globals.myVariable = "SongNameAndStuff"; // Save in static global variable
        startService(); // with appropriate parameters
        startActivity(); // with appropriate parameters

    }
}

public class Activity2 extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        // Get song name from Globals
       String mySongName = Globals.myVariable;
        ...
    }

public class MyService extends Service {
    // Access to song name from whatever method needs it:
    String mySongName = Globals.myVariable;
}
于 2012-06-06T07:30:52.693 に答える
0

以下のスニペットを使用:

アプリケーション クラス :

public class ManagerName extends Application {
private static ManagerName singleton;
private String merchant;

public synchronized static ManagerName getInstance(Context context) {
    if (null == singleton) {
        singleton = new ManagerName();
    }
    return singleton;
}

public void setMerchant(String merchant) {
    this.merchant = merchant;
}

public String getMerchant() {
    return merchant;
}
}

アクティビティでの値の保存と取得:

public class ActivityName extends Activity  {

private ManagerName cacheManager;
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.user_details);

    cacheManager = ManagerName.getInstance(ActivityName.this);

    String merchant = cacheManager.setMerchant("Hello");// Store data in Application Class
    String storedValue=cacheManager.getMerchant();  // Retrieve Value from Application class    
}
}

マニフェストは次のようになります。

<application
    android:name=".ManagerName"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name" >
    <activity>......</activity>
</application>

アプリケーションからの値の保存と取得の概念は非常に単純です。

  1. Application クラス名に変数を作成 -> private ManagerName cacheManager ;
  2. 次のように初期化します -> cacheManager = ManagerName.getInstance(ActivityName.this);
  3. このインスタンスを使用して、値を保存および取得します。

cacheManager.setMerchant("こんにちは");

cacheManager.getMerchant();

詳細については、このリンクアプリケーション クラスを確認してください。

于 2012-06-06T07:31:47.697 に答える
0

私は単にsharedpreferences tbhを使用します。必要なもののように聞こえます...クラスを静的にアクセスできるようにしてから、静的なゲッターおよびセッターメソッドを作成します。

    import android.content.Context;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.util.Log;

public class OurPreferences {
    private static final String TAG = OurPreferences.class.getSimpleName();
    private final String PREFERENCES = "MobilityPreferences";
    private Context mContext;



private OurPreferences() {
}

private static SharedPreferences getPrefs(Context ctx) {
    return ctx.getSharedPreferences("PREFERENCES", Context.MODE_PRIVATE);
}
public static void setRegistrationId(String registrationId,
        long timeChanged, Context ctx) {
    if (registrationId != null) {
        Editor editor = getPrefs(ctx).edit();
        editor.putString("registrationId", registrationId);
        editor.putLong("timeChanged", timeChanged);
        editor.commit();
    }
}

public static boolean isRegistered(Context ctx) {
    boolean registered = getPrefs(ctx).getString("registrationId", null) != null;
    return registered;
}

public static long getRegistrationTimeInMilis(Context ctx){
   return getPrefs(ctx).getLong("timeChanged", -1L);
    }
于 2012-06-06T07:15:07.903 に答える