我尝试做的是将地点列表传递给地图活动并将标记放在这些位置上。我尝试过使用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&#39; onCreate()
Bundle extras = getIntent().getExtras();
if(extras != null){
locs=(ArrayList<Location>)getIntent().getParcelableExtra("setlocations");
addMarkeratLocation();
}
addMarkeratLocation()
方法使用locs
列表使用for循环
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
?这是我第一次使用Parcelable界面。我有什么遗漏吗?任何意见都将不胜感激,谢谢。
答案 0 :(得分:5)
`Location` class is not a Parcalable class.
Intent.putExtra()
函数只接受原始和Parcelable数据类型。因此,您无法通过意图传递List<Location>
。相反,您可以使用Gson
库来序列化Location的arraylist,并将其作为Json字符串传递给MapActivity
,并将MapActivity
反序列化为Json字符串到Location数组。
答案 1 :(得分:4)
步骤1:首先使用Gradle脚本导入Gson库
在Gradle依赖项中添加此行
dependencies {
compile 'com.google.code.gson:gson:2.7'
}
步骤2:将List转换为JSON字符串并将JSON字符串从MainActivity传递给MapsActivity
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:从Bundle获取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 );
我希望这可以帮到你!!
答案 2 :(得分:0)
ArrayList locs = new ArrayList&lt;&gt;(); 应该使用Parcelable实现位置类,您已经实现了Parcelable,但它适用于Location类的活动。
请参阅以下链接,了解与您的查询相关的更多信息。