gpt4 book ai didi

java - stackmob 查询后标记未显示在 map 上

转载 作者:行者123 更新时间:2023-12-01 13:33:00 24 4
gpt4 key购买 nike

我正在尝试向我的 map 添加标记,坐标和名称包含在我通过对 stackmob 数据库的查询获得的停止对象中,程序运行良好,显示 map ,但由于某种原因它看起来它没有执行 addmarker 指令,甚至不会循环 addMarkers 方法中的 for 。另外,我在控制台或 LogCat 中没有收到任何类型的错误或消息,我已经没有办法解决这个问题了。

public class MainActivity extends Activity {

GoogleMap map;
List<Stop> stops=null;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
map = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)).getMap();
StackMobAndroid.init(getApplicationContext(), 0, "f4e013f5-3e0f-41e2-af2f-3fc2bfa2446b");
getMarkers();
}

public void getMarkers( )
{
Stop.query(Stop.class, new StackMobQuery().field(new StackMobQueryField("stop")), new StackMobQueryCallback<Stop>() {

@Override
public void success(List<Stop> result) {

addMarkers(result);
}

@Override
public void failure(StackMobException e) {
System.out.println("Fail");
}
});


}

public void addMarkers(List<Stop> stops)
{

for(int i=0;i<=stops.size();i++)
{
LatLng markerPos = new LatLng(stops.get(i).getLatitude(), stops.get(i).getLongitude());
System.out.println(markerPos);
System.out.println(stops.get(i).getName());
System.out.println(i);
map.addMarker(new MarkerOptions().title(stops.get(i).getName()).snippet("test").position(markerPos));
}
}

谢谢

编辑:如果我手动添加标记,比如说 onCreate 方法,它将在 map 上正确显示。

Edit2:当我在 map.addmarker 周围放置 try catch 语句时,错误消息显示“不在主线程上”对此不确定。

最佳答案

好吧,我找到了解决方案,显然 stackmob 查询在单独的线程上运行,因此如果您想修改 ui 元素(例如本例中的 map ),则必须从 success 方法调用 runonUithread。

public void getMarkers( )
{
Stop.query(Stop.class, new StackMobQuery().field(new StackMobQueryField("stop")), new StackMobQueryCallback<Stop>() {

@Override
public void success(List<Stop> result) {

runThread(result);
}

@Override
public void failure(StackMobException e) {
System.out.println("Fail");
}
});


}


private void runThread(final List<Stop> stops) {

new Thread() {
public void run() {
int i=0;
while (i++ < 1) {
try {
runOnUiThread(new Runnable() {

@Override
public void run() {
for(int j=0;j<stops.size();j++)
{
LatLng markerPos = new LatLng(stops.get(j).getLatitude(), stops.get(j).getLongitude());
System.out.println(markerPos);
System.out.println(stops.get(j).getName());
System.out.println(j);

try {
map.addMarker(new MarkerOptions().title(stops.get(j).getName()).snippet("test").position(markerPos));
} catch (Exception e) {
System.err.println(e.getMessage());
}

}
}
});
Thread.sleep(10000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}.start();
}

关于java - stackmob 查询后标记未显示在 map 上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21444221/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com