在包含地图的片段中恢复对象的包裹阵列列表



我有一个包含地图的片段。该片段使用对象的数组列表,用于从父母那里收到的标记的位置和描述。问题是,即使我将arraylist保存在其 onsaveinstancestate 中的捆绑包上,并在 increate 中再次检索它,以下错误弹出了

05-07 15:39:55.453: E/Parcel(24252): Class not found when unmarshalling: com.ictcsu.DatabaseClasses.sentdata, e: java.lang.ClassNotFoundException: com.ictcsu.DatabaseClasses.sentdata
05-07 15:39:55.453: D/AndroidRuntime(24252): Shutting down VM
05-07 15:39:55.453: W/dalvikvm(24252): threadid=1: thread exiting with uncaught exception (group=0x40fe72a0)
05-07 15:39:55.473: E/AndroidRuntime(24252): FATAL EXCEPTION: main
05-07 15:39:55.473: E/AndroidRuntime(24252): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.ictcsu.testapp1/com.ictcsu.viewdata.Activity_Viewdata}: android.os.BadParcelableException: ClassNotFoundException when unmarshalling: com.ictcsu.DatabaseClasses.sentdata
05-07 15:39:55.473: E/AndroidRuntime(24252):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2070)
05-07 15:39:55.473: E/AndroidRuntime(24252):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2095)
05-07 15:39:55.473: E/AndroidRuntime(24252):    at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:3568)
05-07 15:39:55.473: E/AndroidRuntime(24252):    at android.app.ActivityThread.access$700(ActivityThread.java:134)
05-07 15:39:55.473: E/AndroidRuntime(24252):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1209)
05-07 15:39:55.473: E/AndroidRuntime(24252):    at android.os.Handler.dispatchMessage(Handler.java:99)
05-07 15:39:55.473: E/AndroidRuntime(24252):    at android.os.Looper.loop(Looper.java:137)
05-07 15:39:55.473: E/AndroidRuntime(24252):    at android.app.ActivityThread.main(ActivityThread.java:4830)
05-07 15:39:55.473: E/AndroidRuntime(24252):    at java.lang.reflect.Method.invokeNative(Native Method)
05-07 15:39:55.473: E/AndroidRuntime(24252):    at java.lang.reflect.Method.invoke(Method.java:511)
05-07 15:39:55.473: E/AndroidRuntime(24252):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789)
05-07 15:39:55.473: E/AndroidRuntime(24252):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:556)
05-07 15:39:55.473: E/AndroidRuntime(24252):    at dalvik.system.NativeStart.main(Native Method)
05-07 15:39:55.473: E/AndroidRuntime(24252): Caused by: android.os.BadParcelableException: ClassNotFoundException when unmarshalling: com.ictcsu.DatabaseClasses.sentdata

它说我的班级也没有找到,即使确实存在!这是我的片段代码

public class Fragment_map extends Fragment{
private static final String TAG = Fragment_map.class.getSimpleName();
private static final String MYLIST = "myList";
List<Marker> markers = new ArrayList<Marker>();
MapView mMapView;
private static GoogleMap googleMap;
private selector selectorListener;
private static ArrayList<sentdata> data = new ArrayList<sentdata>();
private Boolean mInitialCreate;

public static Fragment_map newInstance(ArrayList<sentdata> _data){
    Log.i(TAG, "List Size:" + _data.size());
    Fragment_map newfragment_map = new Fragment_map();
    Bundle args = newfragment_map.getArguments();
    if(args==null){
        args = new Bundle();
    }
    args.putParcelableArrayList(MYLIST, _data);
    newfragment_map.setArguments(args);
    return newfragment_map;
}
@Override
public void onAttach(Activity activity) {
    super.onAttach(activity);
    Fragment parentFragment = getParentFragment();
    if (parentFragment != null && parentFragment instanceof selector) {
        selectorListener = (selector) parentFragment;
    }
    else if (activity != null && activity instanceof selector) {
        selectorListener = (selector) activity;
    }
    else if (selectorListener == null) {
        Log.w(TAG, "onAttach: niether the parent fragment or parent activity implement OnImageSelectedListener, "
                + "image selections will not be communicated to other components");
    }
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    //super.onCreate(savedInstanceState);
    Log.w(TAG, "here in OCREATE Of map");
    Bundle args = getArguments();
    if (args != null) {
        data = args.getParcelableArrayList(MYLIST);
    }
    if (savedInstanceState != null) {
        data = savedInstanceState.getParcelableArrayList(MYLIST);
        if(data.size()!=0){
            for(int i=0; i< data.size(); i++){
                Log.w(TAG,data.get(i).gettmp());
            }
        }
        mInitialCreate = false;
    }else {
        mInitialCreate = true;
    }
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.fragment_map, container, false);
    mMapView = (MapView) rootView.findViewById(R.id.map);
    mMapView.onCreate(savedInstanceState);
    mMapView.onResume();// needed to get the map to display immediately
    try {
        MapsInitializer.initialize(getActivity().getApplicationContext());
    } catch (Exception e) {
        e.printStackTrace();
    }
    googleMap = mMapView.getMap();
    googleMap.setOnMarkerClickListener(new OnMarkerClickListener()
    {
        @Override
        public boolean onMarkerClick(Marker arg0) {
            for(int i=0; i< markers.size();i++){
                if(arg0.equals(markers.get(i))){ // if marker source is clicked
                     Log.w(TAG,"Clicked");
                     selectorListener.setlist(i);
                }
                // display toast;
            }
            return true;
        }

    }); 
    if(data.size()!=0 && data !=null){
        setmap();
    }
    if (mInitialCreate) {
        mInitialCreate = false;
    }
    return rootView;   
}


public void setmap(){
    for(int i=0; i<data.size();i++){
        double lat = Double.parseDouble(data.get(i).getlat());
        double longt = Double.parseDouble(data.get(i).getlong());
        Marker marker = googleMap.addMarker(new MarkerOptions()
            .title("Hello Maps")
            .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_ROSE))
            .position(new LatLng(lat, longt)));

        // Changing marker icon
       // marker.showInfoWindow();
        // adding marker
        markers.add(marker);

    }
     markers.get(0).showInfoWindow();
     CameraPosition cameraPosition = new CameraPosition.Builder()
        .target(new LatLng(Double.parseDouble(data.get(0).getlat()), Double.parseDouble(data.get(0).getlong()))).zoom(75).build();
     googleMap.animateCamera(CameraUpdateFactory
                .newCameraPosition(cameraPosition));
}
public void setview(double lat, double longt, int num){
     //MarkerOptions marker = new MarkerOptions().position(
      //          new LatLng(lat, longt)).title("Hello Maps");
        // Changing marker icon
        //marker.icon(BitmapDescriptorFactory
        //        .defaultMarker(BitmapDescriptorFactory.HUE_ROSE));
        // adding marker
        //googleMap.addMarker(marker);
    Log.i(TAG, "___Check data:"+ num);
    for(int i=0;i<markers.size();i++){
        markers.get(i).hideInfoWindow();
    }
        markers.get(num).showInfoWindow();

        CameraPosition cameraPosition = new CameraPosition.Builder()
                .target(new LatLng(Double.parseDouble(data.get(num).getlat()),  Double.parseDouble(data.get(num).getlong()))).zoom(90).build();
        googleMap.animateCamera(CameraUpdateFactory
                .newCameraPosition(cameraPosition));
}

@Override
public void onResume() {
    super.onResume();
    mMapView.onResume();
}
@Override
public void onPause() {
    super.onPause();
    mMapView.onPause();
}
@Override
public void onDestroy() {
    super.onDestroy();
    mMapView.onDestroy();
}
@Override
public void onLowMemory() {
    super.onLowMemory();
    mMapView.onLowMemory();
}

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    if (savedInstanceState != null) {
        data = savedInstanceState.getParcelableArrayList(MYLIST);
        mInitialCreate = false;
    }
    Log.v(TAG, "onActivityCreated");
}
@Override
public void onViewStateRestored(Bundle savedInstanceState) {
    super.onViewStateRestored(savedInstanceState);
    Log.v(TAG, "onViewStateRestored");
}
@Override
public void onStart() {
    super.onStart();
    Log.v(TAG, "onStart");
}

@Override
public void onStop() {
    super.onStop();
    Log.v(TAG, "onStop");
}
@Override
public void onDestroyView() {
    super.onDestroyView();
    Log.v(TAG, "onDestroyView");
}


@Override
public void onSaveInstanceState(Bundle outState) {
    Log.v(TAG, "onSaveInstanceState");
    outState.putParcelableArrayList(MYLIST, data);
    super.onSaveInstanceState(outState);
}

}

我什至尝试在中检索捆绑包,但仍无法使用。我试图在我的logcat中显示保存在 savedinstancestate 上的阵列列表,但根本不是空的。我检查了我的课程并搜索一些错误,但似乎还可以。

public class sentdata implements Parcelable{
private int _id;
private String _data="";
private String _lat="";
private String _long="";
private String _img="";
private String _imgP="";
private int _sntvia;
private String _snttime="";
private String _template="";

public sentdata(){}
public sentdata( String data, String lat, String longt, String img, String imgp, int sntvia, String sntime, String template  ){
    this._data = data;
    this._lat = lat;
    this._long = longt;
    this._img = img;
    this._imgP = imgp;
    this._sntvia = sntvia;
    this._snttime = sntime;
    this._template = template;
}
public sentdata( int id, String data, String lat, String longt, String img, String imgp, int sntvia, String sntime, String template  ){
    this._id = id;
    this._data = data;
    this._lat = lat;
    this._long = longt;
    this._img = img;
    this._imgP = imgp;
    this._sntvia = sntvia;
    this._snttime = sntime;
    this._template = template;
}

public int getid(){
    return this._id;
}

public void setid(int id){
     this._id = id;
}
public void setdata(String data){
    this._data = data;
}
public String getdata(){
    return this._data;
}
public void setlat(String lat){
    this._lat = lat;
}
public String getlat(){
    return this._lat;
}
public void setlong(String longt){
    this._long = longt;
}
public String getlong(){
    return this._long;
}
public void setimg(String img){
    this._img = img;
}
public String getimg(){
    return this._img;
}

public void setimgP (String imgP){
    this._imgP = imgP;
}
public String getimgP(){
    return this._imgP;
}

public void setsentvia(int sntvia){
    this._sntvia = sntvia;
}
public int getsentvia(){
    return this._sntvia;
}

public void setsentTime(String sentime ){
    this._snttime = sentime;
}
public String getsenttime(){
    return this._snttime;
}
public void settemp (String tmp ){
    this._template = tmp;
}
public String gettmp(){
    return this._template;
}

@Override
public int describeContents() {
    // TODO Auto-generated method stub
    return 0;
}

public sentdata(Parcel source){
    _id = source.readInt();
    _data = source.readString();
    _lat = source.readString();
    _long = source.readString();
    _img = source.readString();
    _imgP = source.readString();
    _sntvia = source.readInt();
    _snttime = source.readString();
    _template = source.readString();
}
@Override
public void writeToParcel(Parcel dest, int flags) {
    // TODO Auto-generated method stub
    dest.writeInt(_id);     
    dest.writeString(_data);
    dest.writeString(_lat);
    dest.writeString(_long);
    dest.writeString(_img);
    dest.writeString(_imgP);
    dest.writeInt(_sntvia);
    dest.writeString(_snttime);
    dest.writeString(_template);
}
public static final Parcelable.Creator<sentdata> CREATOR = new Parcelable.Creator<sentdata>() {
    @Override
    public sentdata createFromParcel(Parcel source) {
        // TODO Auto-generated method stub
        return new sentdata(source);
    }
    @Override
    public sentdata[] newArray(int size) {
        // TODO Auto-generated method stub
        return new sentdata[size];
    }


};

}

请帮助我。我花了将近一天的时间来解决这个错误,但没有找到解决方案。我认为我的地图可能有问题,但是我是在项目上使用Google Maps的新手。请帮忙。!先感谢您。

您应该尝试使用:

args.setClassLoader(sentData.getClassLoader())

在获取数据之前

最新更新