Więc w zasadzie przeszedłem tym tutorialu http://mindtherobot.com/blog/37/android-architecture-tutorial-developing-an-app-with-a-background-service-using-ipc/Parcelable napotkał IOException pisanie zaszeregować obiekt
Bo to jest mniej więcej to, co chcę osiągnąć. Chcę, aby moja usługa GPS działała w tle, stale zbierając współrzędne GPS i zapisując je w tablicy, w ten sposób użytkownik może zamienić się na inną czynność i wrócić do działania Mapy, a następnie wyznaczyć najbardziej swoją całą zarejestrowaną ścieżkę.
Przeprowadziłem ten samouczek, aby skonfigurować IPC i wygląda na to, że działa on mniej lub więcej, ale mam problem z odzyskaniem danych z mojej aktywności. Oto moje pliki, pierwszy to mój obiekt Parcelable, który jest listą, która będzie przechowywać GPSObject. Dalej są moje GPSObject, które są tylko serializowalnym obiektem zawierającym niektóre informacje z obiektu lokalizacji Androida.
package com.android.SnowFever;
import java.util.ArrayList;
import java.util.List;
import com.android.SnowFever.*;
import com.google.android.maps.GeoPoint;
import android.os.Parcel;
import android.os.Parcelable;
public final class GPSResult implements Parcelable {
public static final Creator<GPSResult> CREATOR = new Creator<GPSResult>() {
@Override
public GPSResult[] newArray(int size) {
return new GPSResult[size];
}
@Override
public GPSResult createFromParcel(Parcel source) {
return new GPSResult(source);
}
};
private List<GPSObject> geoPoints;
public GPSResult() {
geoPoints = new ArrayList<GPSObject>();
}
@SuppressWarnings("unchecked")
private GPSResult(Parcel source) {
geoPoints = source.readArrayList(GPSService.class.getClassLoader());
}
public void addGPS(GPSObject location) {
geoPoints.add(location);
}
public List<GPSObject> getGeoPoints() {
return geoPoints;
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeList(geoPoints);
}
}
A to moja klasa GPSObject
package com.android.SnowFever;
import java.io.Serializable;
import com.google.android.maps.GeoPoint;
import android.location.Location;
public class GPSObject implements Serializable{
/**
*
*/
private static final long serialVersionUID = 1L;
float spd, acc;
double lat, lng, alt;
GeoPoint gp;
public GPSObject(Location l) {
lat = l.getLatitude() * 1E6;
lng = l.getLongitude() * 1E6;
alt = l.getAltitude();
spd = l.getSpeed();
acc = l.getAccuracy();
gp = new GeoPoint((int)lat,(int)lng);
}
}
Aby dodać pliki do mojej listy GPSResult zgłoszę
latestGPSResult.getGeoPoints().add(new GPSObject(location));
i pojawia się błąd zawarty w temacie wątku, większy kawałek okna błędu poniżej:
11-01 18:49:06.818: E/JavaBinder(20754): *** Uncaught remote exception! (Exceptions are not yet supported across processes.)
11-01 18:49:06.818: E/JavaBinder(20754): java.lang.RuntimeException: Parcelable encountered IOException writing serializable object (name = com.android.SnowFever.GPSObject)
11-01 18:49:06.818: E/JavaBinder(20754): at android.os.Parcel.writeSerializable(Parcel.java:1176)
11-01 18:49:06.818: E/JavaBinder(20754): at android.os.Parcel.writeValue(Parcel.java:1130)
11-01 18:49:06.818: E/JavaBinder(20754): at android.os.Parcel.writeList(Parcel.java:519)
11-01 18:49:06.818: E/JavaBinder(20754): at com.android.SnowFever.GPSResult.writeToParcel(GPSResult.java:52)
11-01 18:49:06.818: E/JavaBinder(20754): at com.android.SnowFever.GPSApi$Stub.onTransact(GPSApi.java:52)
11-01 18:49:06.818: E/JavaBinder(20754): at android.os.Binder.execTransact(Binder.java:320)
11-01 18:49:06.818: E/JavaBinder(20754): at android.os.BinderProxy.transact(Native Method)
11-01 18:49:06.818: E/JavaBinder(20754): at com.android.SnowFever.GPSListener$Stub$Proxy.handleGPSUpdated(GPSListener.java:76)
11-01 18:49:06.818: E/JavaBinder(20754): at com.android.SnowFever.GPSService$GeoUpdateHandler.onLocationChanged(GPSService.java:91)