java - 如何让后台任务在地图上移动标记
问题描述
在我的地图活动中,我有一个 AsyncTask 使用套接字与另一个程序进行通信并获取一些信息。根据该信息,我必须在地图上移动某些标记。这怎么可能?
如果我只是尝试直接从后台任务中使用 setPosition(),它就不起作用。
标记的移动与我无关,所有必要的列表、标记选项等都将被添加。问题是在哪里执行它们以便地图得到更新并且我可以看到标记在移动(将它们放在 onMapReady 中不起作用。该函数必须结束才能显示地图)。
这是后台任务:
class backTask extends AsyncTask<Void, Void, Void>
{
Consumer consumer;
public backTask(Consumer c)
{
this.consumer = c;
}
@Override
protected Void doInBackground(Void... voids)
{
String comm_info = consumer.Start();
StringTokenizer tok = new StringTokenizer(comm_info, "+");
int bro_port = Integer.parseInt(tok.nextToken());
String bro_ip = tok.nextToken();
//keep asking for updates
Message question = new Message("update?");
Message answer;
try
{
while(true)
{
Socket Con_sock = new Socket(InetAddress.getByName(bro_ip), bro_port);
ObjectOutputStream ask = new ObjectOutputStream(Con_sock.getOutputStream());
ObjectInputStream rep = new ObjectInputStream(Con_sock.getInputStream());
//asking
ask.writeObject(question);
ask.flush();
//get response
answer = (Message) rep.readObject();
if (answer.type == 2)
{
//No update
}
else if (answer.type == 0)
{
//got update
//move / create markers here
}
Thread.sleep(500);
}//loop
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
return null;
}
}//backTask END
}
和 onMapReady 方法:
public void onMapReady(GoogleMap googleMap)
{
mMap = googleMap;
LatLng athens = new LatLng(37.93, 23.731960);
mMap.moveCamera(CameraUpdateFactory.newLatLng(athens));
mMap.animateCamera(CameraUpdateFactory.zoomTo(13));
Consumer con = (Consumer)getIntent().getExtras().get("Consumer");
backTask BT = new backTask(con);
BT.execute();
}
解决方案
推荐阅读
- c++ - 克莱恩没有看到明格
- php - 运行 laravel 应用程序时找不到 Laravel [vendor.installer.welcome] 并重定向到 localhost:8000/install
- javascript - 为什么发布请求没有返回正确的值
- java - 多个单图像瓦片集未在地图显示上呈现
- c# - 如何解决这个 firebaseAuth 错误,将新用户添加到 firebase 时出错
- java - 片段中带有 RequestPermission 的 registerForActivityResult 不起作用
- android - ANR 输入调度超时(ActivityRecord 没有焦点窗口)
- javascript - 使用数据属性并将它们用于 XML HTTP 请求
- scala - 从回调函数发送 zio http 响应
- linux-kernel - 如何在运行时在 linux 客户端驱动程序中声明/定义 hwmon 传感器属性