无法将位置从一项活动返回到另一项活动
Posted
技术标签:
【中文标题】无法将位置从一项活动返回到另一项活动【英文标题】:Can't return location from one activity to another 【发布时间】:2017-10-08 08:43:32 【问题描述】:我正在尝试使用 AsyncTask 从 mysql 数据库中获取纬度和经度并将其显示在 Map 上。我创建了一个从数据库获取位置的类 这是从数据库返回位置的方法
public Location addEmployee()
class AddEmployee extends AsyncTask<Void, Void, String>
//ProgressDialog loading;
/* @Override
protected void onPreExecute()
super.onPreExecute();
loading = ProgressDialog.show(MainActivity.this, "Retreiving...", "Wait...", false, false);
*/
@Override
protected void onPostExecute(String success)
// super.onPostExecute(success);
//loading.dismiss();
try
parseJSON(success);
catch (JSONException e)
e.printStackTrace();
@Override
protected String doInBackground(Void... v)
HashMap<String, String> params = new HashMap<>();
params.put("busid", busid);
RequestHandler rh = new RequestHandler();
String res = rh.sendPostRequest("https://tkajbaje.000webhostapp.com/php/busid.php", params);
return res;
public void parseJSON(final String success) throws JSONException
JSONObject jsonObject;
jsonObject = new JSONObject(success);
if (jsonObject.has("Latitude"))
location.setLatitude(Double.valueOf(jsonObject.getString("Latitude")));
if (jsonObject.has("Longitude"))
location.setLongitude(Double.valueOf(jsonObject.getString("Longitude")));
AddEmployee ae = new AddEmployee();
ae.execute();
return(location);
我有另一个活动,它从上述函数中获取位置并将其显示在地图上。这里是代码
public void onMapReady(GoogleMap googleMap)
// Add a marker in Sydney, Australia,
// and move the map's camera to the same location.
Bundle extras = getIntent().getExtras();
String busid=String.valueOf(1);
Location location;
MainActivity activity=new MainActivity(busid);
location=activity.addEmployee();
double Latitude=location.getLatitude();
Toast.makeText(MapsMarkerActivity.this,String.valueOf(Latitude), Toast.LENGTH_LONG).show();
double Longitude=location.getLongitude();
LatLng sydney = new LatLng(Latitude, Longitude);
googleMap.addMarker(new MarkerOptions().position(sydney)
.title("Bus location"));
googleMap.moveCamera(CameraUpdateFactory.newLatLng(sydney));
但是经纬度总是恰好是0.0。
【问题讨论】:
【参考方案1】:Cuz,它启动 AsyncTask 并返回位置对象(无论该对象的状态是什么)。它不会等待 AsyncTask 完成执行。
解决方案:-
您可以在该类中创建一个接口并在onPostExecute()
中执行在活动中实现该接口或将其与类对象匿名使用。现在,只要它回调,您就可以完成剩下的工作。
【讨论】:
【参考方案2】:我没有看到 location
是在哪里定义的,但是看起来您正在混合异步和同步代码。
AddEmployee ae = new AddEmployee();
ae.execute();
return(location);
在这一部分中,您调用一个异步任务,如果任务成功,它将为location
分配一个新值,但是这里的关键字是异步的,这里location
将在异步任务完成之前返回。您可以创建一个 Listener 并在 onPostExecute
中调用它。
MainActivity activity=new MainActivity(busid);
location=activity.addEmployee();
在这里,我强烈建议创建一个新类并将 addEmployee 放在那里(以及其他不特定于 Activity 的逻辑)。使用新关键字创建新活动不是一个好方法。
【讨论】:
我如何创建一个监听器并在 onPostExecute 中调用它? SRB禁令描述了一个粗略的实现,您也可以搜索Java回调以获得更多示例。一个例子是:***.com/a/18279545/1364138以上是关于无法将位置从一项活动返回到另一项活动的主要内容,如果未能解决你的问题,请参考以下文章