0

あるアプリケーションのアクティビティから別のアプリケーションのメイン アクティビティにカスタム オブジェクトを渡す必要があります。

示されているように、intent.putExtra を使用してこれを達成できますか。

putExtra("key",obj);

putExtra メソッドがこれをサポートしていないため、エラーが表示されていました。これはどのように達成できますか?

どんな助けでも大歓迎です。

編集

次のクラスのインスタンスは、別のアプリケーションに渡す必要があります。オブジェクト「obj」は次のようになります。これを渡す必要があります。

CounterAndNotifier obj = new CounterAndNotifier(5, this)

obj は渡されるオブジェクトです

public class CounterAndNotifier
{
private int counter = 0;
private int count;
private Runnable runnable;

public CounterAndNotifier(int count, Runnable runnable)
{
    this.count = count;
    this.runnable = runnable;
}

public synchronized void incrementCounter()
{
    counter++;
    if (counter == count) {
        runnable.run();
    }
}
}
4

1 に答える 1

2

更新 2: コンストラクターの例:

CounterAndNotifier counter = new CounterAndNotifier(0, new SerializableRunnable() {
            @Override
            public void run() {

            }
        });

また

SerializableRunnable runnable = new SerializableRunnable() {
        @Override
        public void run() {
            /* Running code here */
        }
});
CounterAndNotifier counter = new CounterAndNotifier(0, runnable);

更新: Runnable はインターフェイスであり、それ自体では Serializable ではありません。これを回避するには、次のような新しいクラスを作成します。

public abstract class SerializableRunnable implements Runnable, Serializable {
    /* Nothing needs to go here */
}

次に、Runnable の参照を SerializableRunnable に変更すると、問題なくオブジェクトをインテントにシリアル化できるはずです。

新しいオブジェクトは次のようになります。

public class CounterAndNotifier implements Serializable
{
    private int counter = 0;
    private int count;
    private SerializableRunnable runnable;

    public CounterAndNotifier(int count, SerializableRunnable runnable)
    {
        this.count = count;
        this.runnable = runnable;
    }

    public synchronized void incrementCounter()
    {
        counter++;
        if (counter == count) {
            runnable.run();
        }
    }
}

名前を変えるだけで、同じ方法で Runnable オブジェクトを作成できます。

Intent元の回答: 通常のオブジェクトをエクストラに入れることはできません。オブジェクト メンバーがすべてシリアル化可能な型である場合は、Serializableインターフェイスを実装するだけで、オブジェクトをIntent. それ以外の場合は、オブジェクトを実装Parceableして、Parcel にフラット化できます。

Serializableオブジェクト メンバーが基本型である限り、を使用する場合のコード変更ははるかに少なくて済みます。また、どちらを使用すべきかを判断するために、最初に受信側アプリケーションで がサポートされていることを確認する必要があります。

次のようになります。

public class YourObject implements Serializable {

    private static final long serialVersionUID = -6242440735315628245L;
    /* Your class members */

}

インテントへの追加:

Intent intent = new Intent();
intent.putExtra("YourKey", new YourObject());

意図から抜け出す:

YourObject obj = (YourObject)intent.getSerializableExtra("YourKey");
于 2012-09-13T13:31:34.137 に答える