2017-06-18 72 views
0

所以我使用凌空从数据库读取值到我的android应用程序,我有一个问题,当我尝试从我的数据库选择经度和纬度,意图使用我得到的值响应运行速度比响应实际需要从数据库获取选定值的速度快,这会导致始终打开位置为0,0的Google地图片段。Android意图运行速度比响应

这是我的Android代码

Response.Listener<String> responseListener4 =new Response.Listener<String>() { 
        @Override 
        public void onResponse(String response) { 
         try { 
          JSONObject jsonResponse = new JSONObject(response); 
          boolean success=jsonResponse.getBoolean("success"); 
          if (success) { 
           lat= jsonResponse.getDouble("lat"); 
           lng= jsonResponse.getDouble("lng"); 
           System.out.println(lat); 
           System.out.println(lng); 
           Intent i2=new Intent(lists_activity.this,supervisor_maps.class); 
           i2.putExtra("lat",lat); 
           i2.putExtra("lng",lng); 
           startActivity(i2); 
          } else { 
           AlertDialog.Builder builder = new AlertDialog.Builder(lists_activity.this); 
           builder.setMessage("Loading Trucks Failed...") 
             .setNegativeButton("Retry",null) 
             .create() 
             .show(); 
          } 
         } catch (JSONException e) { 
          e.printStackTrace(); 
         } 
        } 
       }; 
       UpdatedLocation updatedLocation=new UpdatedLocation(cmp,splitted[1],responseListener4); 
       RequestQueue queue=Volley.newRequestQueue(lists_activity.this); 
       queue.add(updatedLocation); 

,这是我应该去和从进入分片打开位置的类。

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    if(GoogleServiceAvailable()) 
    { 
     Toast.makeText(this,"Perfect!!!",Toast.LENGTH_LONG).show(); 
     setContentView(R.layout.activity_driver_maps); 
     Intent test=getIntent(); 
     test.getDoubleExtra("lat",latitude); 
     test.getDoubleExtra("lng",longitude); 
     System.out.println(latitude); 
     System.out.println(longitude); 
     initMap(); 
    } 
    else 
    { 
     setContentView(R.layout.error); 
    } 
} 
public boolean GoogleServiceAvailable() 
{ 
    GoogleApiAvailability api=GoogleApiAvailability.getInstance(); 
    int isAvailable=api.isGooglePlayServicesAvailable(this); 
    if (isAvailable== ConnectionResult.SUCCESS) 
    { 
     return true; 
    } 
    else if (api.isUserResolvableError(isAvailable)) 
    { 
     Dialog dialog=api.getErrorDialog(this,isAvailable,0); 
     dialog.show(); 
    } 
    else 
    { 
     Toast.makeText(this,"Cant connect to play services",Toast.LENGTH_LONG).show(); 
    } 
    return false; 
} 
private void initMap() { 
    MapFragment mapFragment= (MapFragment) getFragmentManager().findFragmentById(R.id.mapFragment); 
    mapFragment.getMapAsync(this); 
} 

@Override 
public void onMapReady(GoogleMap googleMap) { 
    mGoogleMap=googleMap; 
    goToLocation(latitude, longitude,15); 
} 

private void goToLocation(double lat, double lng, float zoom) { 
    LatLng ll=new LatLng(lat,lng); 
    CameraUpdate update= CameraUpdateFactory.newLatLngZoom(ll,zoom); 
    mGoogleMap.moveCamera(update); 
    mGoogleMap.addMarker(new MarkerOptions().position(new LatLng(latitude,longitude)).title("Your Location.")); 
} 

}

当然,你可以猜测第一2的System.out不打印时,在第二类中的位置,在这种情况下是一个30,30测试值,但第二的System.out的

只打印0,0

回答

0

您没有将值存储到第二类的纬度和经度变量中。

test.getDoubleExtra("lat",latitude); 
test.getDoubleExtra("lng",longitude); 

应该是:

latitude = test.getDoubleExtra("lat",0); 
longitude = test.getDoubleExtra("lng",0); 

intent.getDoubleExtra的工作方式比getStringExtra的工作方式不同。第二个参数是“默认值”。意思是如果意图没有找到“纬度”值,它将使用默认值,在这种情况下纬度(自动初始化为0)。

你可以写一个任意的值而不是0我写,并检查值是否是任意值,然后有意图的错误,所以你做一些特定的事情。当然,这不是一个“必须”,而是一个建议。

+0

idk说什么男人,谢谢,完美答案:D –