2012-02-28 18 views
0

私はルーパーを実装しようとしていますので、GPS座標をデータベースに送信するためのスレッドを作成できます。私はJavaを初めて使っていますが、これは本当に混乱しますが、多分あなたが助けてくれるかもしれません。次のクラスメソッドは、ボタンが押されたときにメインアクティビティによって呼び出されます。このメソッドはGPSの位置を見つけ、それを緯度と経度(ユーザーIDとともに)をデータベースに送る別のクラスのメソッドに送ります。私は、アプリケーションが遅くなったり凍ったりするのに問題があるので、このプロセスのために新しいスレッドを作成するために何らかの方法を実装する必要があるようです。何か案は。私はノブなので優しい。ここに私のコードです:新しいスレッドを作成する - Android

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

私はここで別の戦術を試してみたいです。 Androidには、AsynTaskというクラスがあります。このクラスは、オフロード作業の開発者に負担をかけるために書かれています。

AsyncTaskを使用すると、UIスレッドを適切かつ簡単に使用できます。このクラスを使用すると、スレッドやハンドラを操作することなく、バックグラウンド操作を実行し、UIスレッドで結果を公開できます。

DBへの書き込みと、サーバーに戻ってデータを送信するという点で、私はServiceを使用して見ますが、ネイティブUIスレッド上で実行されていないだけでサービスがIntentService

であることを覚えているだろう
1

このような操作には、AsyncTaskクラスを使用することを検討する必要があります。使い方が簡単で、UIスレッドと簡単に同期する方法を提供します。 Here's Androidでのスレッドに関する素晴らしい投稿は、AsyncTaskの詳細については、Androidドキュメントをご覧ください。お役に立てれば。

0

カスタムスレッドから 'コンテキスト'または任意のUIオブジェクトにアクセスすることはできません。これは、これらがメインのUIスレッドで作成され、スレッドからこれらのオブジェクトにアクセスできないためです。

Martynと同じように、コンテキスト/ UIにアクセスするには、AsyncTaskを作成するか、Handlersを使用する必要があります。

あなたの場合は、AsyncTask

関連する問題