如何通过另一个线程从UI线程修改变量

时间:2014-10-07 20:31:50

标签: java android multithreading google-maps-markers

我编写了一个小应用程序,显示从Google地图(API v2)上的MySQL数据库下载的一些信息。

到目前为止,我只是问我的服务器并偶尔使用AssyncTask更新我的地图,但现在我希望我的地图能够动态更新,因此我必须实时向我的服务器发出请求#34; ;。所以我认为我应该使用一个在循环中请求我的数据库的线程。

我尝试编写我自己的Thread(简化版),但也许我做错了,因为它没有工作:

public class loadMessages extends Thread {
    String messages[];
    public void run() {
        try{
            while(zoomActuel > 13){
 
                messages = myHttpRequest(); //simplified fonction to fetch info in my DB
 
                runOnUiThread(new Runnable() {
                    public void run() { //i update my map by updating my ArrayList<Marker> called myMarkers
                        for (int i = 0; i < messages.length; i++) {
                            myMarkers.add(googleMap.addMarker(new MarkerOptions()
                            .position(new LatLng(lat[i], lng[i]))
                            .title(messages[i])));
                        }
                    }
                });
            }
        }catch(Exception e){
            e.printStackTrace();
        }
    }
}

如果有人知道我应该如何做到这一点,请提前感谢;)

1 个答案:

答案 0 :(得分:1)

我认为这些教程会对您有所帮助。

您可以使用asynctask并更新ui onProgressUpdate()或onPostExecute(),您可以使用runnableOnUiThread或带有处理程序的线程。

http://www.vogella.com/tutorials/AndroidBackgroundProcessing/article.html

http://examples.javacodegeeks.com/android/core/os/handler/android-handler-example/