java - 需要从服务器获取用户当前详细信息
问题描述
我是 android 位置部分的新手,但是将 userA 当前位置发布到服务器,但是在取回 userA 位置并将其显示在 userB 屏幕中时遇到了很多问题。
我所做的是我正在使用 Volley 库从服务器获取位置并通过每 1 秒自动刷新一次页面将其发布到 onMapReady 方法中,但是它给出了一个空指针异常 NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.String.trim()' 在空对象引用上。
如果我的方法是错误的,你能帮我推荐一个吗?
这是我在项目中实现的代码
private void fetchLocation(){
handler.postDelayed(new Runnable() {
@Override
public void run() {
StringRequest request = new StringRequest(Request.Method.GET, Constant.LocationTrackingURL, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
try {
JSONObject object = new JSONObject(response);
JSONArray array = object.getJSONArray("resp");
for (int i=0; i<array.length(); i++){
JSONObject jsonObject = array.getJSONObject(i);
newLatitude = jsonObject.getString("loc_latitude").trim();
newLongitude = jsonObject.getString("loc_longitude").trim();
Toast.makeText(MapAct.this, newLatitude+", "+newLongitude, Toast.LENGTH_SHORT).show();
addmarkerToMap(newLatitude, newLongitude);
}
} catch (JSONException e) {
e.printStackTrace();
Toast.makeText(getApplicationContext(), "Error: " + e.getMessage(), Toast.LENGTH_LONG).show();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
});
RequestQueue queue = Volley.newRequestQueue(getApplicationContext());
queue.add(request);
}
}, 1000);
SupportMapFragment mapFragment = (SupportMapFragment)getSupportFragmentManager().findFragmentById(R.id.maps);
mapFragment.getMapAsync(new OnMapReadyCallback() {
@Override
public void onMapReady(GoogleMap googleMap) {
Double lat = Double.parseDouble(newLatitude);
Double lng = Double.parseDouble(newLongitude);
LatLng latLng = new LatLng(lat, lng);
googleMap.addMarker(new MarkerOptions().position(latLng).title("I'm here"));
CameraPosition cameraPosition = new CameraPosition.Builder().target(latLng).zoom(17).build();
googleMap.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));
}
});
}
private void addmarkerToMap(String newLat, String newLng){
double lat = Double.parseDouble(newLat);
double lng = Double.parseDouble(newLng);
Toast.makeText(this, "Locations are getting posted as latitude : "+lat+", longitude : "+lng, Toast.LENGTH_SHORT).show();
MarkerOptions markerOptions = new MarkerOptions().position(new LatLng(lat, lng)).title("I'm Here");
markerOptions.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED));
mMap.addMarker(markerOptions);
}
解决方案
推荐阅读
- r - 熔化具有互斥值的列并添加原始列
- jquery - jquery 3.5.1 和 tempusdominus datetimepicker 不能一起工作
- android - 如何使用mockito在android中创建模拟api响应
- flutter - Flutter BezierChart 数据问题
- firebase - xamarin.forms listview 项目仅在滚动时更新,即使在 iNotifyPropertychanged 实施之后也是如此
- python - 命名和存储文件信息以进行比较
- python - 如何在 Django 表单中重新填充用户信息?
- html - CSS 滚动捕捉不捕捉到部分
- python - ValueError:找不到子字符串,请救救我
- kotlin - 使用其他地方的内部对象访问 Kotlin 外部类