我试图在包含对象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>
您的内部类还应该是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迭代打印出枪支对象列表? 问题答案: 您要遵循与以前相同的模式: 在这种情况下,它将是: