我要做的是通过位置列表来映射活动并将标记放在这些位置上。我已经尝试在MainActivity中使用
public class MainActivity extends AppCompatActivity implements Parcelable {
ArrayList<Location> locs=new ArrayList<>();
...
locs.add(location);
...
Intent in = new Intent(context,MapsActivity.class);
in.putExtra("setlocations",locs);
startActivity(in);
...
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeList(locs);
}
}
,然后在mapsactivity的ongreate()
中 Bundle extras = getIntent().getExtras();
if(extras != null){
locs=(ArrayList<Location>)getIntent().getParcelableExtra("setlocations");
addMarkeratLocation();
}
addMarkeratLocation()
方法使用locs
列表用于添加用于循环的标记
public void addMarkeratLocation(){
BitmapDescriptor icon = BitmapDescriptorFactory.fromResource(R.mipmap.dott);
LatLng addpoint=new LatLng(0.0,0.0);
for(int i=0;i<locs.size();i++){
addpoint = new LatLng(locs.get(i).getLatitude(), locs.get(i).getLongitude());
mMap.addMarker(new MarkerOptions().position(addpoint).icon(icon));
}
mMap.moveCamera(CameraUpdateFactory.newLatLng(addpoint));
}
我的应用程序发出意图时会崩溃。和logcat显示 java.lang.NullPointerException: Attempt to invoke virtual method 'int java.util.ArrayList.size()' on a null object reference
为什么它显示null
?这是我第一次使用包裹界面。.有没有缺少的东西?任何输入都将不胜感激,谢谢。
`Location` class is not a Parcalable class.
Intent.putExtra()
功能仅接受原始和包裹的数据类型。因此,您无法通过意图传递List<Location>
。取而代之的是,您可以使用Gson
库来序列化您的位置列表,然后将其作为JSON字符串传递给MapActivity
,并将其传递给MapActivity
deleialise JSON字符串到位置数组。
步骤1:使用gradle脚本
的第一个导入gson库在您的gradle依赖项中添加此行
dependencies {
compile 'com.google.code.gson:gson:2.7'
}
步骤2:将列表转换为JSON字符串,然后将JSON字符串从MainActivity转换为MapActivity
Location location1 = new Location("");
location1.setLatitude(12.124);
location1.setLongitude(77.124);
Location location2 = new Location("");
location2.setLatitude(12.765);
location2.setLatitude(77.8965);
List<Location> locations = new ArrayList<Location>();
locations.add(location1);
locations.add(location2);
Gson gson = new Gson();
String jsonString = gson.toJson(locations);
Intent intent = new Intent(MainActivity.this,MapsActivity.class);
intent.putExtra("KEY_LOCATIONS",jsonString);
startActivity(intent);
步骤3:从捆绑包中获取JSON字符串并将其转换为list
Bundle bundle = getIntent().getExtras();
String jsonString = bundle.getString("KEY_LOCATIONS");
Gson gson = new Gson();
Type listOfLocationType = new TypeToken<List<Location>>() {}.getType();
List<Location> locations = gson.fromJson(jsonString,listOfLocationType );
我希望这可以帮助您!
arrayList locs = new arraylist&lt;>();位置类应使用包裹式实施,您已经实现了包裹,但对于位置类应进行的活动。
请参阅下面的链接以获取有关您的查询的更多信息。
将自定义对象的ArrayList传递给另一个活动