在我的android应用中,当我从 RecyclerView 中选择第一个元素(列表中的任何一个)时,我会得到一些位置,但是它可以正常显示位置,但是当我返回选择时另一个给我 NPE 。
第一个示例:
第二个示例:
我选择第一个元素(它起作用)。
我回去选择另一个。
我选择第二个元素(赋予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;
}
}