2
public class move implements Serializable
{
    private static final long serialVersionUID = 6696031872468154516L;
    public move(int a,int b){
        x=a;
        y=b;
    }
    int x,y;
}

これを ObjectOutputStream で送信します - out.writeObject(params[0]); を使用するだけです。

LogCat を見ると、次のように表示されます。

06-02 16:09:48.750: W/System.err(6060): java.io.NotSerializableException: com.SWAP.AndTablet.MainActivity
06-02 16:09:48.750: W/System.err(6060):     at java.io.ObjectOutputStream.writeNewObject(ObjectOutputStream.java:1364)
06-02 16:09:48.750: W/System.err(6060):     at java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.java:1671)
06-02 16:09:48.750: W/System.err(6060):     at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1517)
06-02 16:09:48.750: W/System.err(6060):     at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1481)
06-02 16:09:48.750: W/System.err(6060):     at java.io.ObjectOutputStream.writeFieldValues(ObjectOutputStream.java:979)
06-02 16:09:48.750: W/System.err(6060):     at java.io.ObjectOutputStream.defaultWriteObject(ObjectOutputStream.java:368)
06-02 16:09:48.750: W/System.err(6060):     at java.io.ObjectOutputStream.writeHierarchy(ObjectOutputStream.java:1074)
06-02 16:09:48.750: W/System.err(6060):     at java.io.ObjectOutputStream.writeNewObject(ObjectOutputStream.java:1404)
06-02 16:09:48.750: W/System.err(6060):     at java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.java:1671)
06-02 16:09:48.754: W/System.err(6060):     at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1517)
06-02 16:09:48.754: W/System.err(6060):     at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1481)
06-02 16:09:48.754: W/System.err(6060):     at com.SWAP.AndTablet.MainActivity$MouseMoveSendTask.doInBackground(MainActivity.java:59)
06-02 16:09:48.754: W/System.err(6060):     at com.SWAP.AndTablet.MainActivity$MouseMoveSendTask.doInBackground(MainActivity.java:1)
06-02 16:09:48.754: W/System.err(6060):     at android.os.AsyncTask$2.call(AsyncTask.java:264)
06-02 16:09:48.754: W/System.err(6060):     at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
06-02 16:09:48.754: W/System.err(6060):     at java.util.concurrent.FutureTask.run(FutureTask.java:137)
06-02 16:09:48.754: W/System.err(6060):     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
06-02 16:09:48.757: W/System.err(6060):     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
06-02 16:09:48.757: W/System.err(6060):     at java.lang.Thread.run(Thread.java:856)

誰でも私を助けることができますか?

4

2 に答える 2

8

これは、ネストされたクラスであると思われます。つまり、使用していなくても、外側のクラスへの暗黙的な参照があることを意味します。したがって、クラスが 内にネストされている場合、望んでいないにもかかわらずMainActivity、 の外側のインスタンスをシリアル化しようとすることになります。エラーの原因となっているシリアライズ可能ではありません (そして、ほぼ確実にすべきではありません)。MainActivityMainActivity

静的にするだけでこれを回避できます。

public static class Move implements Serializable {
    private final int x, y;
    private static final long serialVersionUID = 6696031872468154516L;

    public Move(int a,int b) {
        x = a;
        y = b;
    }
}

ネストされたクラスではない場合、問題はあなたが示したコードにあるとは思えません。

于 2012-06-02T08:16:15.143 に答える
0

java.io.NotSerializableException例外エラーが発生するたびに。implements Serializableインターフェイスを作成し、 「変数を静的として定義する」ことを確認してください

于 2015-09-30T15:48:52.893 に答える