2015-06-10 4 views
0

, когда я передаю этот объект с намерением, его не запускают действие.Ошибка передачи данных между действиями android при использовании пользовательского объекта

код пользовательского объекта

public class UserVo implements Serializable { 

String name,id; 
String can_reply,can_view; 

public String getName() { 
    return name; 
} 

public void setName(String name) { 
    this.name = name; 
} 

public String getId() { 
    return id; 
} 

public String getCan_reply() { 
    return can_reply; 
} 

public void setCan_reply(String can_reply) { 
    this.can_reply = can_reply; 
} 

public String getCan_view() { 
    return can_view; 
} 

public void setCan_view(String can_view) { 
    this.can_view = can_view; 
} 

public void setId(String id) { 
    this.id = id; 
} 

Передача данных через намерения

intent.putExtra("UserVo",vo); 
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
    startActivity(intent); 
     finish(); 

Получение данных

intent=getIntent(); 
    UserVo vo= (UserVo) intent.getSerializableExtra("UserVo"); 

Я также пробовал расслоение, но он все еще не работает.

+0

опубликуйте свой logcat –

+3

Попробуйте сделать свой класс 'Parcelable': http://blog.denevell.org/android-parcelable.html –

+0

попытайтесь получить данные о намерениях внутри onNewIntent –

ответ

2

Посмотрите на эту ссылку Serializable:

Каждый сериализации класс присваивается идентификатор версии называется serialVersionUID. По умолчанию этот идентификатор вычисляется путем хэширования объявления класса и его членов. Этот идентификатор включен в сериализованную форму, так что конфликты версий могут быть обнаружены во время десериализации. Если локальный serialVersionUID отличается от serialVersionUID в сериализованных данных, десериализация завершится с InvalidClassException.

Чтобы избежать этого:

Вы можете избежать этой ошибки, объявив явную serialVersionUID. Объявление явного serialVersionUID сообщает механизму сериализации, что класс является прямым и обратным совместимым со всеми версиями, которые используют этот serialVersionUID. Объявление serialVersionUID выглядит следующим образом: private static final long serialVersionUID = 0L;

и помните, что:

Если вы объявляете serialVersionUID, вы должны увеличивать его каждый раз, когда ваши изменения класса несовместимо с предыдущей версией. Обычно это когда вы добавляете, изменяете или удаляете поле без переходных процессов.

Для лучшей практики я рекомендую использовать Parcelable. Это сложнее для кодирования, но лучше для производительности.

+0

спасибо за очистку и обмен этой экспликацией. – Ankur1994a

1

Если по какой-либо причине вы не можете сделать свой объект Parcelable, попробуйте добавить serialVersionUID. Вы можете создать его через свою среду IDE или самостоятельно выбрать.

+0

как я могу добавить serialVersionUID. и как он генерируется через IDE – Ankur1994a

+0

Какая IDE вы используете? –

+0

Android Studio 1.2.1.1 – Ankur1994a

1

Для UserVo вы будете иметь

UserVo implements Parcelable { 
... 
... 
public UserVo(){ 

}  
@Override public int describeContents() { 
    return 0; 
} 

    @Override public void writeToParcel(Parcel dest, int flags) { 

    dest.writeString(name); 
    + other data ...writInt etc 

} 

public void readFromParcel(Parcel source){ 
    name = source.readString(); 
    + other data ..keep the same order 
} 
public static final Parcelable.Creator<DocumentFile> CREATOR = new Parcelable.Creator<UserVo>() { 

    @Override 
    public UserVo createFromParcel(Parcel source) { 
     return new UserVo(source); 
    } 

    @Override 
    public UserVo[] newArray(int size) { 
     return new UserVo[size]; 
    } 
}; 
public UserVo(Parcel source) 
{ 
    readFromParcel(source); 
} 

также взглянуть на библиотеке аннотаций, это будет Исли для передачи данных с использованием @Extra аннотации.

0

Чтобы отправить пользовательские объекты из одной операции в другую, вам необходимо сериализовать объекты с помощью serialVersionID. Попробуйте приведенный ниже код для вашего требования.

UserVo.java

public class UserVo implements Serializable { 

private static final long serialVersionUID = 1L; 

String name,id; 
String can_reply,can_view; 

public String getName() { 
    return name; 
} 

public void setName(String name) { 
    this.name = name; 
} 

public String getId() { 
    return id; 
} 

public String getCan_reply() { 
    return can_reply; 
} 

public void setCan_reply(String can_reply) { 
    this.can_reply = can_reply; 
} 

public String getCan_view() { 
    return can_view; 
} 

public void setCan_view(String can_view) { 
    this.can_view = can_view; 
} 

public void setId(String id) { 
    this.id = id; 
} 

ActivityA.java - Для того, чтобы отправить объект через Intent

Intent objectIntent = new Intent(ActivityA.this, ActivityB.class); 
i.putExtra("sendObjects", UserVo); //Your object here 
startActivity(objectIntent); 

ActivityB.java - получить Intent

UserVo mReceiveObjects = (UserVo)getIntent().getExtras().get("sendObjects"); 
Смежные вопросы