首页 > 解决方案 > 谷歌地图给了我空指针异常,而它不应该

问题描述

在我的 android 应用程序中,当我从RecyclerView中选择第一个元素(列表中的任何一个)时,我得到了一些位置,它可以正常工作并且给出位置,但是当我回去选择另一个元素时,它给了我NPE

第一个例子:

第二个例子:

我的代码:

private SupportMapFragment mapFragment;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    view = inflater.inflate(R.layout.fragment_sales_item, container, false);

    if(getArguments()!=null)
    {
        saleID = getArguments().getString("saleID");
    }

    initIDs();

   retroFit();

    maps();

    return view;
}

public void retroFit(){

    Retrofit retrofit = new Retrofit.Builder()
            .baseUrl(ServiceConstants.URL)
            .addConverterFactory(GsonConverterFactory.create())
            .build();

    RoyalAPI royalAPI = retrofit.create(RoyalAPI.class);

    Call<SaleItemResponse> connection = royalAPI.getSaleItem(saleID);
    connection.enqueue(new Callback<SaleItemResponse>() {
        @Override
        public void onResponse(Call<SaleItemResponse> call, Response<SaleItemResponse> response) {
            List<SaleItem> posts = response.body().getData();

            latitude = posts.get(0).getLatitude();
            longitude = posts.get(0).getLongitude();


        }

        @Override
        public void onFailure(Call<SaleItemResponse> call, Throwable t) {

        }
    });


}

private void map(){


    if (mapFragment == null) {
        mapFragment = SupportMapFragment.newInstance();
        mapFragment.getMapAsync(new OnMapReadyCallback() {
            @Override
            public void onMapReady(GoogleMap googleMap) {
                LatLng latLng = new LatLng(Double.parseDouble(latitude), Double.parseDouble(longitude));
                googleMap.addMarker(new MarkerOptions().position(latLng)
                        .title(""));
                googleMap.animateCamera(CameraUpdateFactory.newLatLng(latLng));
            }
        });
    }

    // R.id.map is a FrameLayout, not a Fragment
    getChildFragmentManager().beginTransaction().replace(R.id.map_sales, mapFragment).commit();


}

.

public class SaleItemResponse {

@SerializedName("data")
private List<SaleItem> mData;
@SerializedName("state")
private Long mState;

public List<SaleItem> getData() {
    return mData;
}

public void setData(List<SaleItem> data) {
    mData = data;
}

public Long getState() {
    return mState;
}

public void setState(Long state) {
    mState = state;
}

}

.

public class SaleItem {

@SerializedName("latitude")
private String mLatitude;
@SerializedName("longitude")


public String getLatitude() {
    return mLatitude;
}

public void setLatitude(String latitude) {
    mLatitude = latitude;
}

public String getLongitude() {
    return mLongitude;
}

public void setLongitude(String longitude) {
    mLongitude = longitude;
}
}

标签: androidgoogle-maps

解决方案


推荐阅读