Я все еще изучаю разработку Java/Android, и мне нужно руководство для реализации задачи Async. Я в основном не уверен, где начать его в моей программе. Я изложил код ниже, может ли кто-нибудь показать мне, где и как выполнить задачу? Мое приложение отправляет GPS-координаты в базу данных каждую секунду, и мне нужна отдельная задача, поэтому я не богу вниз по основному потоку и не рискую ошибкой ARN. Вот мой код:С чего начать Async Task - Android
Этот первый блок из моего основного вида деятельности. Когда кнопка нажата, запускается трехсекундный обратный отсчет, и когда он заканчивается (onFinish), пользовательские данные отправляются в одну базу данных (SendUserActivity.sendId...
, это фактически класс, а не активность, только плохо названная), и приложение затем начинается отслеживать пользователя и отправлять координаты в другую базу данных каждую секунду (location.startLocation...
) (две базы данных, чтобы избежать повторения всех данных пользователя).
MainActivity.java:
public void onFinish() {
button.setText("SENT");
SendUserActivity.sendId(usr_id1, first, last);
location.startLocation(getBaseContext(), usr_id1);
Это второй блок кода из класса LocationActivity
(также класс и не является деятельностью, плохое именования снова). Он запрашивает обновление местоположения каждую секунду, а затем отправляет его в PHP-скрипт, который вставляет его в базу данных MySQL.
public class LocationActivity {
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) {
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);
}
};
locManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 0, locListener);
}
public void send(Location loc, String usr_id2) {
Log.i("", String.valueOf(loc.getLatitude() + " - " + String.valueOf(loc.getLongitude())));
String lat = String.valueOf(loc.getLatitude());
String lon = String.valueOf(loc.getLongitude());
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://example.com/test/example.php");
try {
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
nameValuePairs.add(new BasicNameValuePair("lat", lat));
nameValuePairs.add(new BasicNameValuePair("lon", lon));
nameValuePairs.add(new BasicNameValuePair("id", usr_id2));
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
httpclient.execute(httppost);
}
catch (ClientProtocolException e) {
// TODO Auto-generated catch block
}
catch (IOException e) {
// TODO Auto-generated catch block
}
}
}
Чтобы повторить мой вопрос, как бы реализовать задачу async для отправки GPS-информации в базу данных? Я читал о IntentServices, но некоторые из них предположили, что я использую async-задачу. В любом случае, дайте мне знать, где и как реализовать одно из них; Я бы очень признателен. Благодаря!
в основном все, что нужно ждать внешней системы, вне телефон должен быть в Async. Для вашего случая нужно отправить send() в async. – Rudy