2012-06-02 9 views
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]);NotSerializableException

Когда я вижу 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) 

Может кто-нибудь мне помочь?

ответ

8

Я подозреваю, что это вложенный класс, что означает, что существует неявная ссылка на внешний класс, даже если вы его не используете. Поэтому, если ваш класс вложен в MainActivity, вы в конечном итоге попытаетесь выполнить сериализацию прилагаемого экземпляра MainActivity, хотя вы этого не хотите. MainActivity не является сериализуемым (и почти наверняка не должен быть), вызывающим ошибку.

Вы можете обойти это просто сделать его статическим:

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; 
    } 
} 

Если не вложенный класс, то я подозреваю, что проблема не с кодом вы показали нам ,

+0

Большое спасибо! Ты помог мне! Я разделил два класса в каждом java-файле. – Namnamseo

0

Всякий раз, когда вы получаете ошибку исключения java.io.NotSerializableException. Удостоверьтесь, что вы используете интерфейс implements Serializable и «Определите переменные как статические»

Смежные вопросы