如何将位置类型的阵列列表传递给Android中的主要活性的映射



我要做的是通过位置列表来映射活动并将标记放在这些位置上。我已经尝试在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传递给另一个活动

相关内容

  • 没有找到相关文章

最新更新