0

В моем коде я создаю объект области, помещая маркеры на карту и принимая его значения от пользователя, а затем сохраняя его в списке. Затем я использовал parcelableArrayList, чтобы передать этот список другому действию. Я хочу, чтобы пользователь нажал кнопку displayArea только тогда эта активность запущена, и список отображается в AllAreas activty. Но мое приложение падает каждый раз, когда я нажимаю на эту кнопкуПередача списка объектов другому виду деятельности

Код для mapActivity

public class MainActivity extends  
FragmentActivity implements View.OnClickListener,MapDropdown.DialogListener { 

public static final String mapLongitude="longitude"; 
public static final String mapLatitude="latitude"; 
FragmentManager fm = getSupportFragmentManager(); 
Button displayareas; 
Switch deleteareas; 
private boolean del = false; 
private int set = 0; 
public ArrayList<Area> areas; 


private GoogleMap newmap; // Might be null if Google Play services APK is not available. 
LatLng m; 
float radius; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    displayareas = (Button) findViewById(R.id.display); 
    displayareas.setOnClickListener(this); 
    deleteareas = (Switch) findViewById(R.id.delete); 
    areas = new ArrayList<Area>(); 
    deleteareas.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 

     @Override 
     public void onCheckedChanged(CompoundButton buttonView, 
            boolean isChecked) { 

      if (isChecked) { 
       del = true; 
       Toast.makeText(getApplicationContext(), "Deleting enabled", Toast.LENGTH_LONG).show(); 
      } else { 
       del = false; 
       Toast.makeText(getApplicationContext(), "Deleting disabled", Toast.LENGTH_LONG).show(); 
      } 

     } 
    }); 
    Log.d("Map","MapCreated"); 
    setUpMapIfNeeded(); 

} 
@Override 
public void onClick(View v) { 
    if (v.getId() == R.id.display) { 
     Intent intent = new Intent(getApplicationContext(),AllAreas.class); 
     Bundle bundle = new Bundle(); 
     bundle.putParcelableArrayList("data", areas); 
     intent.putExtras(bundle); 
     startActivity(intent); 

    } 

} 

@Override 
protected void onResume() { 
    super.onResume(); 
    //setUpMapIfNeeded(); 
} 


private void setUpMapIfNeeded() { 
    // Do a null check to confirm that we have not already instantiated the map. 
    if (newmap == null) { 
     // Try to obtain the map from the SupportMapFragment. 
     newmap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map)) 
       .getMap(); 
     // Check if we were successful in obtaining the map. 
     if (newmap != null) { 
      setUpMap(); 
      Log.d("MAPS","Map working"); 


     } 
     else Log.d("MAPS","not working"); 

    } 
} 


private void setUpMap() { 

    newmap.addMarker(new MarkerOptions().position(new LatLng(0, 0)).title("Marker").snippet("Snippet")); 

    // Enable MyLocation Layer of Google Map 
    newmap.setMyLocationEnabled(true); 

    // Get LocationManager object from System Service LOCATION_SERVICE 
    LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 

    // Create a criteria object to retrieve provider 
    Criteria criteria = new Criteria(); 

    // Get the name of the best provider 
    String provider = locationManager.getBestProvider(criteria, true); 

    // Get Current Location 
    Location myLocation = locationManager.getLastKnownLocation(provider); 

    // set map type 
    newmap.setMapType(GoogleMap.MAP_TYPE_NORMAL); 

    // Get latitude of the current location 
    double latitude = myLocation.getLatitude(); 

    // Get longitude of the current location 
    double longitude = myLocation.getLongitude(); 

    // Create a LatLng object for the current location 
    LatLng latLng = new LatLng(latitude, longitude); 

    // Show the current location in Google Map 
    newmap.moveCamera(CameraUpdateFactory.newLatLng(latLng)); 

    // Zoom in the Google Map 
    newmap.animateCamera(CameraUpdateFactory.zoomTo(20)); 
    newmap.addMarker(new MarkerOptions().position(new LatLng(latitude, longitude)).title("My location")); 

    Log.d("LATITUDE",String.valueOf(latitude)); 
    Log.d("LONGITUDE",String.valueOf(longitude)); 
    GoogleMap.OnMarkerClickListener listener = new GoogleMap.OnMarkerClickListener() { 

     @Override 
     public boolean onMarkerClick(final Marker marker) { 
      if(del == false){ 
       m=marker.getPosition(); 

      MapDropdown dFragment = new MapDropdown(); 
      // Show DialogFragment 
      dFragment.show(fm, "Dialog Fragment");} 
      else if(del == true){ 
       marker.remove(); 
      } 
      return true; 


     } 

    }; 

    newmap.setOnMarkerClickListener(listener); 

    newmap.setOnMapClickListener(new GoogleMap.OnMapClickListener() { 

     @Override 
     public void onMapClick(LatLng latLng) { 

      // Creating a marker 
      MarkerOptions markerOptions = new MarkerOptions(); 

      // Setting the position for the marker 
      markerOptions.position(latLng); 

      // Setting the title for the marker. 
      // This will be displayed on taping the marker 
      markerOptions.title(latLng.latitude + " : " + latLng.longitude); 


      // Animating to the touched position 
      newmap.animateCamera(CameraUpdateFactory.newLatLng(latLng)); 

      // Placing a marker on the touched position 
      Marker mmarker = newmap.addMarker(markerOptions); 
      m = latLng; 
      Log.d("ADDED LATITUDE",String.valueOf(latLng.latitude)); 
      Log.d("ADDED LONGITUDE",String.valueOf(latLng.longitude)); 

      Toast.makeText(getApplicationContext(),"Block area updated",Toast.LENGTH_LONG).show(); 





     } 
    }); 

} 
@Override 
public void onDialogPositiveClick(DialogFragment dialog , String s, String n){ 
    Log.d("Button","positive"); 
    Log.d("Name",n); 
    Log.d("Radius",s); 

    Log.d("On press LATITUDE",String.valueOf(m.latitude)); 
    Log.d("On press LONGITUDE",String.valueOf(m.longitude)); 
    Area newarea = new Area(n,m.latitude,m.longitude,Float.valueOf(s)); 
    Log.d("object",newarea.getId()); 
    Log.d("object",newarea.getName()); 
    areas.add(newarea); 
    areas.get(0); 
    Log.d("areas",areas.get(0).getName()); 



} 
@Override 
public void onDialogNegativeClick(DialogFragment dialog){ 
Log.d("Button","negative"); 

    } 
} 

Часть mainActivity.java добавления в список является

@Override 
public void onDialogPositiveClick(DialogFragment dialog , String s, 
String n){ 
    Log.d("Button","positive"); 
    //areas is list name 
    //m is current marker 
    Area newarea = new Area(n,m.latitude,m.longitude,Float.valueOf(s)); 

    areas.add(newarea); 



} 

и прохождения списка в mainactivity является

public void onClick(View v) { 
//id of button that will launch Allareas activity 
    if (v.getId() == R.id.display) { 
     Intent intent = new Intent(getApplicationContext(),AllAreas.class); 
     Bundle bundle = new Bundle(); 
     bundle.putParcelableArrayList("data", areas); 
     intent.putExtras(bundle); 
     startActivity(intent); 

    } 

} 

для AllAreas класс

public class AllAreas extends ActionBarActivity { 
//initial layout 
private Area a; 
@Override 

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    setContentView(R.layout.areas); 


    Bundle bundle = getIntent().getExtras(); 
    ArrayList<Area> arealist = bundle.getParcelableArrayList("mylist"); 
    if (arealist.isEmpty()) { 
     Log.d("area list lala", "is empty"); 


    } 
    else { 
     for (int i = 0; i < arealist.size(); i++) { 
      a = arealist.get(0); 
      Log.d("area list lala", a.getName()); 
     } 

    } 
} 

} 
+0

Если у вас есть сбой, вы должны опубликовать полную трассировку стека из logcat. – Karakuri

ответ

0

Вы получаете его неправильно key.you использовал ключ «данные» для ввода его в пучок и пытается получить его с помощью ключа «MyList»

bundle.putParcelableArrayList("data", areas); 

изменить строку

ArrayList<Area> arealist = bundle.getParcelableArrayList("mylist"); 

в

ArrayList<Area> arealist = bundle.getParcelableArrayList("data"); 

дайте мне знать, если он работает.

+0

Это решило проблему. @sourabh Каждый раз, когда я перезапускаю приложение. Все данные списка теряются. Как сохранить данные списка? – user1716

+0

Если вы хотите сохранить объект, есть три способа. 1. Поместите его в общие настройки в виде Json или string. 2. Запишите его в текстовый файл и прочитайте позже. 3. Поместите его в базу данных и выберите позже. –

+0

если это решит вашу проблему, то любезно сделайте это принятым ответом. –

Смежные вопросы