Java 如何将此ArrayList传递给新活动

Java 如何将此ArrayList传递给新活动,java,android,android-activity,arraylist,Java,Android,Android Activity,Arraylist,我正在尝试将此ArrayList传递给另一个活动。 到目前为止,我的努力失败了。 我知道我不知道如何正确地通过考试 以下是我拥有的arrayList代码: public static ArrayList<Movie> getMovieItems() { if(mItems == null) { mItems = new ArrayList<>(); Movie movie1 = new Movie();

我正在尝试将此ArrayList传递给另一个活动。 到目前为止,我的努力失败了。 我知道我不知道如何正确地通过考试

以下是我拥有的arrayList代码:

public static ArrayList<Movie> getMovieItems() {
        if(mItems == null) {
            mItems = new ArrayList<>();

            Movie movie1 = new Movie();
            movie1.setId(1);
            movie1.setTitle("Title1");
            movie1.setStudio("studio1");
            movie1.setDescription("description1");
            movie1.setCardImageUrl("http://3.bp.blogspot.com/-ZKjKucsPdzI/TudWC99CE_I/AAAAAAAAAD8/qvWdDtw5IW0/s1600/%2528393%2529.jpg");
            //movie1.setVideoUrl("http://corochann.com/wp-content/uploads/2015/07/MVI_0949.mp4");
            /* Google sample app's movie */
            //movie1.setVideoUrl("http://www.youtube.com/embed/VopbGPJVkzM");
            //movie1.setVideoUrl("http://live.gph.gov.sa/makkahlive/");
            //movie1.setVideoUrl("http//livestreaming2.itworkscdn.net/squranlive/squran_7200p");

            /// --- try this

            //String url = "http://www.youtube.com/embed/VopbGPJVkzM";

            //movie1.setVideoUrl("http://commondatastorage.googleapis.com/android-tv/Sample%20videos/Demo%20Slam/Google%20Demo%20Slam_%2020ft%20Search.mp4");
            movie1.setVideoUrl("http//livestreaming2.itworkscdn.net/squranlive/squran_360p");
            mItems.add(movie1);


            Movie movie2 = new Movie();
            movie2.setId(2);
            movie2.setTitle("Title2");
            movie2.setStudio("studio2");
            movie2.setDescription("description2");
            movie2.setCardImageUrl("http://www.questionsonislam.com/sites/default/files/mescid-i-nebevi.jpg");
            //movie2.setVideoUrl("http://corochann.com/wp-content/uploads/2015/07/MVI_0962.mp4");
            /* Google sample app's movie */
            movie2.setVideoUrl("http://www.youtube.com/embed/4OoKpZWJASY");
            mItems.add(movie2);

            Movie movie3 = new Movie();
            movie3.setId(3);
            movie3.setTitle("Title3");
            movie3.setStudio("studio3");
            movie3.setDescription("description3");
            movie3.setCardImageUrl("http://2.bp.blogspot.com/-ju9FXyjDFqI/TgY7uVabgxI/AAAAAAAAADw/-qSdxfyHosM/s1600/masjid+qiblatain+%25283%2529.gif");
            //movie3.setVideoUrl("http://corochann.com/wp-content/uploads/2015/07/MVI_1112.mp4");
            movie3.setVideoUrl("http://www.youtube.com/embed/4OoKpZWJASY");
            mItems.add(movie3);

        }
        return mItems;
    }
publicstaticarraylistgetmovieitems(){
if(mItems==null){
mItems=新的ArrayList();
电影1=新电影();
电影1.setId(1);
电影1.片名(“片名1”);
电影1.setStudio(“studio1”);
电影1.场景描述(“描述1”);
电影1.setCardImageUrl(“http://3.bp.blogspot.com/-ZKjKucsPdzI/TudWC99CE_I/AAAAAAAAAD8/qvWdDtw5IW0/s1600/%2528393%2529.jpg");
//movie1.setVideoUrl(“http://corochann.com/wp-content/uploads/2015/07/MVI_0949.mp4");
/*谷歌示例应用程序的电影*/
//movie1.setVideoUrl(“http://www.youtube.com/embed/VopbGPJVkzM");
//movie1.setVideoUrl(“http://live.gph.gov.sa/makkahlive/");
//movie1.setVideoUrl(“http//livestreaming2.itworkscdn.net/squranlive/squran_7200p”);
///---试试这个
//字符串url=”http://www.youtube.com/embed/VopbGPJVkzM";
//movie1.setVideoUrl(“http://commondatastorage.googleapis.com/android-tv/Sample%20videos/Demo%20Slam/Google%20Demo%20Slam_%2020ft%20Search.mp4");
movie1.setVideoUrl(“http//livestreaming2.itworkscdn.net/squranlive/squran_360p”);
增加(电影1);
电影2=新电影();
电影2.setId(2);
电影2.片名(“片名2”);
电影2.setStudio(“研究2”);
电影2.场景描述(“描述2”);
电影2.setCardImageUrl(“http://www.questionsonislam.com/sites/default/files/mescid-i-nebevi.jpg");
//movie2.setVideoUrl(“http://corochann.com/wp-content/uploads/2015/07/MVI_0962.mp4");
/*谷歌示例应用程序的电影*/
movie2.setVideoUrl(“http://www.youtube.com/embed/4OoKpZWJASY");
增补(电影2);
电影3=新电影();
电影3.setId(3);
电影3.片名(“片名3”);
电影3.setStudio(“studio3”);
电影3.场景描述(“描述3”);
电影3.setCardImageUrl(“http://2.bp.blogspot.com/-ju9FXyjDFqI/TgY7uVabgxI/AAAAAAAAADw/-qSdxfyHosM/s1600/masjid+qiblatain+%25283%2529.gif);
//movie3.setVideoUrl(“http://corochann.com/wp-content/uploads/2015/07/MVI_1112.mp4");
movie3.setVideoUrl(“http://www.youtube.com/embed/4OoKpZWJASY");
增加(电影3);
}
返回斜纹螨;
}
mItems是我要传递给另一个活动的ArrayList。 我试过这个“模板”

ArrayList chanList=new ArrayList();
然后我意识到我没有正确的答案

有人能帮我做一些有见识的指导,帮助我理解如何正确地做这件事吗

谢谢


ironmantis7x

您必须实现您的
电影
类,或者使用意图通过活动传递它

编辑:您的类实现
Parcelable
的示例:

public class Movie implements Parcelable {

    // I'm assuming that's what you have inside your class.
    private int id;
    private String title;
    private String studio;
    private String description;
    private String imageURL;
    private String videoURL;

    public Movie() { }

    // Getters and Setters here
    //...

    // Read the Parcel in the same order you wrote it.
    public Movie(Parcel in) {
        this.id = in.readInt();
        this.title = in.readString();
        this.studio = in.readString();
        this.description = in.readString();
        this.imageURL = in.readString();
        this.videoURL = in.readString();
    }

    // Some dumb method, just leave it as it is.
    @Override
    public int describeContents() {
        return 0;
    }

    // Write your data to Parcel, remember, you'll have to read in the same order you wrote here.
    @Override
    public void writeToParcel(Parcel out, int flags) {
        out.writeInt(id);
        out.writeString(title);
        out.writeString(studio);
        out.writeString(description);
        out.writeString(imageURL);
        out.writeString(videoURL);
    }

    public static final Creator<Movie> CREATOR = new Creator() {
        @Override
        public Movie createFromParcel(Parcel parcel) {
            return new Movie(parcel);
        }

        @Override
        public Movie[] newArray(int i) {
            return new Movie[i];
        }
    };
}
公共类电影实现可包裹{
//我想这就是你们班上的情况。
私有int-id;
私有字符串标题;
私人弦乐工作室;
私有字符串描述;
私有字符串imageURL;
私有字符串videoURL;
公共电影(){}
//这里有接球手和接球手
//...
//按照你写的顺序读包裹。
公共电影(包裹内){
this.id=in.readInt();
this.title=in.readString();
this.studio=in.readString();
this.description=in.readString();
this.imageURL=in.readString();
this.videoURL=in.readString();
}
//一些愚蠢的方法,就让它保持原样吧。
@凌驾
公共int描述内容(){
返回0;
}
//把你的数据写在包裹上,记住,你必须按照你在这里写的顺序阅读。
@凌驾
公共无效写入包(包出,内部标志){
out.writeInt(id);
外。书面记录(标题);
户外写作(演播室);
out.writeString(描述);
out.writeString(imageURL);
out.writeString(videoURL);
}
公共静态最终创建者=新创建者(){
@凌驾
公共电影createFromParcel(包裹){
归还新电影(包裹);
}
@凌驾
公共电影[]新阵列(int i){
返回新电影[i];
}
};
}
完成此操作后,您可以检查、此和,以了解更多信息


TL;DR:您必须在发送者活动和第二个活动中使用。

您必须使您的
电影
类实现,或者使用意图将其通过活动传递

编辑:您的类实现
Parcelable
的示例:

public class Movie implements Parcelable {

    // I'm assuming that's what you have inside your class.
    private int id;
    private String title;
    private String studio;
    private String description;
    private String imageURL;
    private String videoURL;

    public Movie() { }

    // Getters and Setters here
    //...

    // Read the Parcel in the same order you wrote it.
    public Movie(Parcel in) {
        this.id = in.readInt();
        this.title = in.readString();
        this.studio = in.readString();
        this.description = in.readString();
        this.imageURL = in.readString();
        this.videoURL = in.readString();
    }

    // Some dumb method, just leave it as it is.
    @Override
    public int describeContents() {
        return 0;
    }

    // Write your data to Parcel, remember, you'll have to read in the same order you wrote here.
    @Override
    public void writeToParcel(Parcel out, int flags) {
        out.writeInt(id);
        out.writeString(title);
        out.writeString(studio);
        out.writeString(description);
        out.writeString(imageURL);
        out.writeString(videoURL);
    }

    public static final Creator<Movie> CREATOR = new Creator() {
        @Override
        public Movie createFromParcel(Parcel parcel) {
            return new Movie(parcel);
        }

        @Override
        public Movie[] newArray(int i) {
            return new Movie[i];
        }
    };
}
公共类电影实现可包裹{
//我想这就是你们班上的情况。
私有int-id;
私有字符串标题;
私人弦乐工作室;
私有字符串描述;
私有字符串imageURL;
私有字符串videoURL;
公共电影(){}
//这里有接球手和接球手
//...
//按照你写的顺序读包裹。
公共电影(包裹内){
this.id=in.readInt();
this.title=in.readString();
this.studio=in.readString();
this.description=in.readString();
this.imageURL=in.readString();
this.videoURL=in.readString();
}
//一些愚蠢的方法,就让它保持原样吧。
@凌驾
公共int描述内容(){
返回0;
}
//把你的数据写在包裹上,记住,你必须按照你在这里写的顺序阅读。
@凌驾
公共无效写入包(包出,内部标志)
Intent intent = new Intent(this, YourNextActivity.class);
intent.putParcelableArrayListExtra("some string identifier", yourArrayList);
startActivity(intent)
 ArrayList<Movie> chanList = getIntent().getParcelableExtra("some string identifier");
Intent intent = new Intent(this, NextActivity.class);
intent.putParcelableArrayListExtra("key_string", movieArrayList);
startActivity(intent);
  SharedPreferences sharedPreferences =context.getSharedPreferences("MyPrefrence", 0); 

  SharedPreferences.Editor editor = sharedPreferences.edit();

  String movie_data = gson.toJson(mItems);

  editor.putString("MovieDatas", task_data);

  editor.commit()
  SharedPreferences sharedPreferences = context.getSharedPreferences("MyPrefrence", 0);

  String json=sharedPreferences.getString("MovieDatas","");

  Type type=new TypeToken<ArrayList<Movie>>(){}.getType();

  mItems = new ArrayList<Movie>();

  mItems=New Gson().fromjson(json,type);
ArrayList<String> myList = new ArrayList<String>();
intent.putExtra("mylist", myList);
ArrayList<String> myList = (ArrayList<String>)getIntent().getSerializableExtra("mylist");