当前位置: 首页 > 知识库问答 >
问题:

类可与对象的ArrayList打包

裴意
2023-03-14

我试图在包含对象ArrayList的类上使用Parcelable。

public class Library implements Parcelable {

ArrayList<Station> stations;
private String[] stationNames;
private String[] stationsDescription;
private int[] images;
private String[] streamLinks;

public Library(String[] stationNames, String[] stationsDescription, int[] images, String[] streamLinks) {
    //instantiationCounter++;
    this.stationNames = stationNames;
    this.stationsDescription = stationsDescription;
    this.images = images;
    this.streamLinks = streamLinks;

    this.stations = new ArrayList<>();

    for (int i = 0; i < stationNames.length; i++) {
        stations.add(new Station(stationNames[i], stationsDescription[i], streamLinks[i], images[i]));
    }
}

public Library() {
}

protected Library(Parcel in) {
    stationNames = in.createStringArray();
    stationsDescription = in.createStringArray();
    images = in.createIntArray();
    streamLinks = in.createStringArray();
    stationNames = in.createStringArray();
    stations = in.readArrayList(null);

}

@Override
public void writeToParcel(Parcel dest, int flags) {
    dest.writeStringArray(stationNames);
    dest.writeStringArray(stationsDescription);
    dest.writeIntArray(images);
    dest.writeStringArray(streamLinks);
    dest.writeList(stations);
}

更新:Station现在也实现了Parcelable,正如Naveen Dew所建议的那样。

车站等级-

public class Station implements Parcelable {
    String name;
    String description;
    String streamLink;
    int img;

    public Station(String name, String description, String streamLink, int img) {
        this.name = name;
        this.description = description;
        this.streamLink = streamLink;
        this.img = img;
    }

    protected Station(Parcel in) {
        name = in.readString();
        description = in.readString();
        streamLink = in.readString();
        img = in.readInt();
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(name);
        dest.writeString(description);
        dest.writeString(streamLink);
        dest.writeInt(img);
    }

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

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

        @Override
        public Station[] newArray(int size) {
            return new Station[size];
        }
    };

    String getStationName() {
        return name;
    }

    String getDescription() {
        return description;
    }

    String getStreamLink() {
        return streamLink;
    }

    int getStationImg() {
        return img;
    }

    void details() {
        System.out.println(name);
        System.out.println(description);
        System.out.println(streamLink);
        System.out.println(img);
        System.out.println("--------------");
    }
}

当我把图书馆的包裹递给“为声音而制造”服务时,我遇到了一个问题。

                Intent serviceIntent = new Intent(getActivity(), BackgroundSoundService.class);
            serviceIntent.putExtra("Library", (Parcelable) mainLibrary);
            serviceIntent.putExtra("position", position);
            getContext().startService(serviceIntent);
    public int onStartCommand(Intent intent, int flags, int startId) {


    library = (Library) intent.getParcelableExtra("Library");
    position = intent.getIntExtra("position", 0);

}

java.lang.RuntimeException:无法使用意图启动服务com.tsuryohananov.IsrailiRadio.BackgroundSoundService@823fbd{cmp=com.tsuryohananov.IsrailiRadio/.BackgroundSoundService(has extras)}:java.lang.RuntimeException:Parcel Android.os.Parcel@5f24b14:在偏移量10964处Unmarshalling Android.app.ActivityThread.Handleserviceargs(ActivityThread.java:3556)处在Android.os.Parcel.ReadValue(Parcel.java:2754)在Android.os.Parcel.ReadListInternal(Parcel.java:3103)在Android.os.Parcel.ReadArrayList(Parcel.java:2305)在Com.Tsuryohananov.IsraeliRadio.Library(Parcel.java:2305)在Com.Tsuryohananov.IsraeliRadio.Library.(Library.java:64)在Com.Tsuryohananov.IsraeliRadio.Library美元

更新-

清单-

<?xml version="1.0" encoding="utf-8"?>
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <activity
        android:name=".MainActivity"
        android:configChanges="orientation|screenSize"
        android:label="@string/app_name"
        android:theme="@style/AppTheme.NoActionBar">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <!--
        <activity
        android:name=".NotificationView"
        android:configChanges="orientation|screenSize"
        android:label="@string/app_name"
        android:theme="@style/AppTheme.NoActionBar">
        </activity>
    -->


    <service
        android:name=".BackgroundSoundService"
        android:label="My Service">
    </service>

    <activity android:name=".PlayActivity"></activity>
</application>

共有1个答案

公羊喜
2023-03-14

您的内部类还应该是parcelable

检查station是否正在实现parcelable

更新

将此添加到library类

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

    @Override
    public Library[] newArray(int size) {
        return new Library[size];
    }
};

另外,请张贴您的清单文件

 类似资料:
  • 我已经创建了几个对象,我想在ArrayList中只打印对象的一个参数: 我要打印:

  • 问题类文件数据类问题(val id:Int,val问题:String,val图像:Int,val选项一:String,val选项二:String,val选项三:String,val选项四:String,val更正答案:Int, 对象文件结果: 对象常量{ 返回问题列表}

  • 编辑:这是scanner类正在读取的。txt文件的示例: 编辑:以下是术语类:

  • 今天好,我有一个设计问题,我不能真正弄明白我的头,我希望我能解释清楚,让所有人都能理解。我有一个ClassA,它是一个包含ClassB的Arraylist的单例,所以ClassA是: 但是当我试图在另一个类中访问它时,我得到一个java.lang.IndexOutOfBoundsException:index:0,size:0,我猜这是来自ClassB保存ClassD的ArrayList的,因为其

  • 问题内容: 到目前为止,我已经看到许多可拆分的示例,但是由于某种原因,当它变得更加复杂时,我无法使其正常工作。我有一个Movie对象,该对象实现了Parcelable。本书对象包含一些属性,例如ArrayLists。执行ReadTypedList时,运行我的应用程序会导致NullPointerException!我真的不在这里 评论类: 如果有人能让我走上正确的道路,我将不胜感激,我已经花了很多时

  • 问题内容: 使用示例: 假设我有一个课堂电话。我还有另一个上课电话。 类的ArrayList为。 要遍历.. 的Arraylist而不是这样做: 我们可以像这样简单地遍历ArrayList : 现在,我要迭代并打印出所有第3个对象: 现在我的问题是: 与使用常规的for循环不同,我如何使用ArrayList迭代打印出枪支对象列表? 问题答案: 您要遵循与以前相同的模式: 在这种情况下,它将是: