Reputation: 62419
I want to pass one object of ArrayList<Links>
to Next Activity.
I have checked use of Parcelable
to achieve this but I have one another Class object of Stream
class in Links
class.
How can i pass this Links object to Next Activity
Links
class:public class Links implements Parcelable {
private String name;
private Streams streams;
/**
* @param name the name to set
*/
public void setName(String name) {
this.name = name;
}
/**
* @return the name
*/
public String getName() {
return name;
}
/**
* @param streams the streams to set
*/
public void setStreams(Streams streams) {
this.streams = streams;
}
/**
* @return the streams
*/
public Streams getStreams() {
return streams;
}
@Override
public int describeContents() {
// TODO Auto-generated method stub
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
// TODO Auto-generated method stub
/**
** WHAT CAN I DO HERE...???
**/
}
}
Stream
Class:public class Streams {
private String link;
private String stream;
/**
* @param link the link to set
*/
public void setLink(String link) {
this.link = link;
}
/**
* @return the link
*/
public String getLink() {
return link;
}
/**
* @param stream the stream to set
*/
public void setStream(String stream) {
this.stream = stream;
}
/**
* @return the stream
*/
public String getStream() {
return stream;
}
}
I want to send ArrayList object to next activity. how can i?
I got this in Logcat:
06-19 16:23:00.820: E/AndroidRuntime(21080): FATAL EXCEPTION: main
06-19 16:23:00.820: E/AndroidRuntime(21080): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.gtu.gtupapers/com.gtu.gtupapers.StreamSelection}: java.lang.NullPointerException: expected receiver of type com.gtu.gtupapers.Links, but got null
06-19 16:23:00.820: E/AndroidRuntime(21080): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2129)
06-19 16:23:00.820: E/AndroidRuntime(21080): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2154)
06-19 16:23:00.820: E/AndroidRuntime(21080): at android.app.ActivityThread.access$700(ActivityThread.java:146)
06-19 16:23:00.820: E/AndroidRuntime(21080): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1260)
06-19 16:23:00.820: E/AndroidRuntime(21080): at android.os.Handler.dispatchMessage(Handler.java:99)
06-19 16:23:00.820: E/AndroidRuntime(21080): at android.os.Looper.loop(Looper.java:137)
06-19 16:23:00.820: E/AndroidRuntime(21080): at android.app.ActivityThread.main(ActivityThread.java:4949)
06-19 16:23:00.820: E/AndroidRuntime(21080): at java.lang.reflect.Method.invokeNative(Native Method)
06-19 16:23:00.820: E/AndroidRuntime(21080): at java.lang.reflect.Method.invoke(Method.java:511)
06-19 16:23:00.820: E/AndroidRuntime(21080): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1043)
06-19 16:23:00.820: E/AndroidRuntime(21080): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:810)
06-19 16:23:00.820: E/AndroidRuntime(21080): at dalvik.system.NativeStart.main(Native Method)
06-19 16:23:00.820: E/AndroidRuntime(21080): Caused by: java.lang.NullPointerException: expected receiver of type com.gtu.gtupapers.Links, but got null
06-19 16:23:00.820: E/AndroidRuntime(21080): at java.lang.reflect.Field.getField(Native Method)
06-19 16:23:00.820: E/AndroidRuntime(21080): at java.lang.reflect.Field.get(Field.java:269)
06-19 16:23:00.820: E/AndroidRuntime(21080): at android.os.Parcel.readParcelable(Parcel.java:2066)
06-19 16:23:00.820: E/AndroidRuntime(21080): at android.os.Parcel.readValue(Parcel.java:1965)
06-19 16:23:00.820: E/AndroidRuntime(21080): at android.os.Parcel.readListInternal(Parcel.java:2235)
06-19 16:23:00.820: E/AndroidRuntime(21080): at android.os.Parcel.readArrayList(Parcel.java:1655)
06-19 16:23:00.820: E/AndroidRuntime(21080): at android.os.Parcel.readValue(Parcel.java:1986)
06-19 16:23:00.820: E/AndroidRuntime(21080): at android.os.Parcel.readMapInternal(Parcel.java:2226)
06-19 16:23:00.820: E/AndroidRuntime(21080): at android.os.Bundle.unparcel(Bundle.java:223)
06-19 16:23:00.820: E/AndroidRuntime(21080): at android.os.Bundle.getParcelableArrayList(Bundle.java:1209)
06-19 16:23:00.820: E/AndroidRuntime(21080): at android.content.Intent.getParcelableArrayListExtra(Intent.java:4477)
06-19 16:23:00.820: E/AndroidRuntime(21080): at com.gtu.gtupapers.StreamSelection.onCreate(StreamSelection.java:16)
06-19 16:23:00.820: E/AndroidRuntime(21080): at android.app.Activity.performCreate(Activity.java:5185)
06-19 16:23:00.820: E/AndroidRuntime(21080): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1094)
06-19 16:23:00.820: E/AndroidRuntime(21080): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2093)
06-19 16:23:00.820: E/AndroidRuntime(21080): ... 11 more
Your help would be appreciated...
Upvotes: 1
Views: 179
Reputation: 62419
Thanks to WonderCsabo for creating both class Parcelable but i have created using this link So also Thanks to Zhuinden for this post.
I am posting full answer which will be helpful to others also.
public class Links implements Parcelable {
private String name;
private Streams streams;
public Links() {
// TODO Auto-generated constructor stud
}
/**
* @param name the name to set
*/
public void setName(String name) {
this.name = name;
}
/**
* @return the name
*/
public String getName() {
return name;
}
/**
* @param streams the streams to set
*/
public void setStreams(Streams streams) {
this.streams = streams;
}
/**
* @return the streams
*/
public Streams getStreams() {
return streams;
}
protected Links(Parcel in) {
name = in.readString();
streams = (Streams) in.readValue(Streams.class.getClassLoader());
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(name);
dest.writeValue(streams);
}
public static final Parcelable.Creator<Links> CREATOR = new Parcelable.Creator<Links>() {
@Override
public Links createFromParcel(Parcel in) {
return new Links(in);
}
@Override
public Links[] newArray(int size) {
return new Links[size];
}
};
}
public class Streams implements Parcelable {
private String link;
private String stream;
Streams() {
// TODO Auto-generated constructor stub
}
protected Streams(Parcel in) {
link = in.readString();
stream = in.readString();
}
/**
* @param link the link to set
*/
public void setLink(String link) {
this.link = link;
}
/**
* @return the link
*/
public String getLink() {
return link;
}
/**
* @param stream the stream to set
*/
public void setStream(String stream) {
this.stream = stream;
}
/**
* @return the stream
*/
public String getStream() {
return stream;
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(link);
dest.writeString(stream);
}
public static final Parcelable.Creator<Streams> CREATOR = new Parcelable.Creator<Streams>() {
@Override
public Streams createFromParcel(Parcel in) {
return new Streams(in);
}
@Override
public Streams[] newArray(int size) {
return new Streams[size];
}
};
}
then Finally send to next Activity
using:
Intent intent = new Intent(MainActivity.this, StreamSelection.class);
intent.putExtra("position", position);
intent.putParcelableArrayListExtra("list", arrayList);
startActivity(intent);
And Receiving:
ArrayList<Links> links = getIntent().getParcelableArrayListExtra("list");
int pos = getIntent().getExtras().getInt("position");
Log.d("TAG", "Links: " + links.get(pos).getName());
Thanks for help.
Upvotes: 1
Reputation: 12207
Links
class:
public class Links implements Parcelable {
private String name;
private Streams streams;
public Links(String name, Streams streams) {
this.name = name;
this.streams = streams;
}
/**
* @param name the name to set
*/
public void setName(String name) {
this.name = name;
}
/**
* @return the name
*/
public String getName() {
return name;
}
/**
* @param streams the streams to set
*/
public void setStreams(Streams streams) {
this.streams = streams;
}
/**
* @return the streams
*/
public Streams getStreams() {
return streams;
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(name);
dest.writeParcelable(streams, flags);
}
public static Parcelable.Creator<Links> CREATOR = new Parcelable.Creator<Links>() {
@Override
public Links createFromParcel(Parcel source) {
String name = source.readString();
Streams streams = source.readParcelable(Streams.class.getClassLoader());
return new Links(name, streams);
}
@Override
public Links[] newArray(int size) {
return new Links[size];
}
};
}
Streams
class:
public class Streams implements Parcelable {
private String link;
private String stream;
public Streams(String link, String stream) {
this.link = link;
this.stream = stream;
}
/**
* @param link the link to set
*/
public void setLink(String link) {
this.link = link;
}
/**
* @return the link
*/
public String getLink() {
return link;
}
/**
* @param stream the stream to set
*/
public void setStream(String stream) {
this.stream = stream;
}
/**
* @return the stream
*/
public String getStream() {
return stream;
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(link);
dest.writeString(stream);
}
public static final Parcelable.Creator<Streams> CREATOR = new Parcelable.Creator<Streams>() {
@Override
public Streams createFromParcel(Parcel source) {
String link = source.readString();
String stream = source.readString();
return new Streams(link, stream);
}
@Override
public Streams[] newArray(int size) {
return new Streams[size];
}
};
}
Then you can pass the list:
Intent intent = new Intent(this, OtherActivity.class);
intent.putParcelableArrayListExtra("links", yourList);
startActivity(intent);
And in OtherActivity
:
Intent intent = getIntent();
ArrayList<Links> links = intent.getParcelableArrayListExtra("links");
Upvotes: 2
Reputation: 81539
Make both classes Parcelable using the Parcelabler at http://www.parcelabler.com/
Upvotes: 2