Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/200.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 恢复包含地图的片段中对象的可包裹数组列表_Java_Android_Google Maps_Android Fragments - Fatal编程技术网

Java 恢复包含地图的片段中对象的可包裹数组列表

Java 恢复包含地图的片段中对象的可包裹数组列表,java,android,google-maps,android-fragments,Java,Android,Google Maps,Android Fragments,我有一个包含地图的片段。片段使用对象的arraylist作为从其父对象接收的标记的位置和描述。问题是,即使我将arraylist保存在bundle的onSaveInstanceState中,并在onCreate中再次检索它,也会弹出以下错误 05-07 15:39:55.453: E/Parcel(24252): Class not found when unmarshalling: com.ictcsu.DatabaseClasses.sentdata, e: java.lang.ClassN

我有一个包含地图的片段。片段使用对象的arraylist作为从其父对象接收的标记的位置和描述。问题是,即使我将arraylist保存在bundle的onSaveInstanceState中,并在onCreate中再次检索它,也会弹出以下错误

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);
}
公共类片段\u映射扩展片段{
private static final String TAG=Fragment_map.class.getSimpleName();
私有静态最终字符串MYLIST=“MYLIST”;
列表标记=新的ArrayList();
地图视图;
私有静态谷歌地图;
专用选择器或侦听器;
私有静态ArrayList数据=新ArrayList();
私有布尔最小创建;
公共静态片段映射新实例(ArrayList数据){
Log.i(标记,“列表大小:”+_data.Size());
Fragment_-map newfragment_-map=新片段_-map();
Bundle args=newfragment_map.getArguments();
如果(args==null){
args=newbundle();
}
args.putParcelableArrayList(MYLIST,_数据);
newfragment_map.setArguments(args);
返回newfragment\u映射;
}
@凌驾
公共事务主任(活动){
超级转速计(活动);
片段parentFragment=getParentFragment();
if(parentFragment!=选择器的null&&parentFragment实例){
selectorListener=(选择器)parentFragment;
}
else if(活动!=null&&activity实例选择器){
selectorListener=(选择器)活动;
}
else if(selectorListener==null){
w(标记“onAttach:niether父片段或父活动实现OnImageSelectedListener,”
+“图像选择将不会传达给其他组件”);
}
}
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
//super.onCreate(savedInstanceState);
Log.w(标记“在地图的OCREATE中”);
Bundle args=getArguments();
如果(args!=null){
data=args.getParcelableArrayList(MYLIST);
}
如果(savedInstanceState!=null){
data=savedInstanceState.getParcelableArrayList(MYLIST);
如果(data.size()!=0){
对于(int i=0;i对于(int i=0;i您应尝试使用:

args.setClassLoader(sentData.getClassLoader())

在您获取数据之前

为什么不使用SharedReferences?我使用的是一个对象列表,该对象包含多个数据,因此使用SharedReferences可能没有效率,并且用户单击其他片段时对象的ArrayList是可更新的。感谢您的回复。我按照您的回答设置了我的捆绑包,但它没有更改什么都可以,还是有同样的错误。
args.setClassLoader(sentData.getClassLoader())