0

我正在尝试实现一个循环器,以便我可以创建一个用于将 GPS 坐标发送到数据库的线程。我是 Java 新手,这真的很令人困惑,但也许你可以提供帮助。当按下按钮时,主活动调用以下类方法。该方法找到 GPS 位置,然后将其发送到另一个类的方法,该方法将纬度和经度(连同用户 ID)发送到数据库。我的应用程序有时会变慢和冻结,因此我似乎需要实施某种方法来为此过程创建一个新线程。有任何想法吗。我是菜鸟,所以要温柔。这是我的代码:

    public class LocationActivity extends Thread{

    private LocationManager locManager;
    private LocationListener locListener;

    public void startLocation(Context context, String usr_id2)
    {   
        final String usr = usr_id2;

    //get a reference to the LocationManager
    locManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);


    //checked to receive updates from the position
    locListener = new LocationListener() {
        public void onLocationChanged(Location location) {
            SendActivity.send(location, usr);
        }
        public void onProviderDisabled(String provider){
            //labelState.setText("Provider OFF");
        }
        public void onProviderEnabled(String provider){
            //labelState.setText("Provider ON ");
        }
        public void onStatusChanged(String provider, int status, Bundle extras){
            //Log.i("", "Provider Status: " + status);
            }
        };

        Looper looper = null;
        locManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locListener, looper);
    }
}

另一个问题,我是在此处添加循环器,还是在将信息发送到数据库的类中添加?它使用 HTTP Post 发送到 PHP 程序,该程序将信息添加到 MySQL 数据库。

4

3 回答 3

4

我很想在这里尝试不同的策略。Android 有一个名为的类AsynTask,旨在减轻开发人员在线程上卸载工作的负担。

AsyncTask 允许正确和轻松地使用 UI 线程。此类允许在 UI 线程上执行后台操作并发布结果,而无需操作线程和/或处理程序。

在写入数据库并将数据发送回服务器方面,我会考虑使用 a Service,但请记住,唯一不在 UI 线程上本机运行的服务是IntentService

于 2012-02-28T14:31:51.417 回答
1

您应该考虑使用AsyncTask类进行此类操作,它非常易于使用,并且它提供了一种与 UI 线程同步的简单方法。这是AsyncTask一篇关于 Android 线程的好文章,您可以在 Android 文档中了解更多信息。希望这可以帮助。

于 2012-02-28T14:34:26.917 回答
0

您无法从自定义线程访问“上下文”或任何 UI 对象。这是因为这些是在主 UI 线程中创建的,您无法从线程中访问这些对象。

正如 Martyn 所说,您需要创建一个 AsyncTask 或使用 Handlers 来访问 context/ui。

在你的情况下,去 AsyncTask

于 2012-02-28T14:34:57.677 回答