У меня есть этот кусок кода, который я расскажу ниже. Он публикует идентификаторы пользователей, широту и долготу, которые в php обновляют текущие пользователи lat и long, а затем выполняет запрос, который извлекает массив пользователей, находящихся в определенной области вокруг вас. (Получает возраст, имя ..) Таким образом, это заполняет listView, но запрос должен быть выполнен вручную, путем обновления или открытия операции. Однако у меня есть LocationService, и в нем он имеет onLocationChanged(), который обновляется при изменении местоположения пользователя. Мне нужно, чтобы мой запрос/асинктас выполнялся каждый раз, когда местоположение изменяется, а затем заполняет мой список в моей активности. Любые предложения/примеры кода.AsyncTask Внутри службы, заполняющей ListView
Это код внутри моей деятельности, которая вызывает задачу асинхронной:
private void startQueryView() {
// show progress dialog
dialog = ProgressDialog.show(this, "", "Loading...");
LocalDatabase localDatabase = new LocalDatabase(this);
User user = localDatabase.getLoggedInUser();
String url = ServerRequests.SERVER_ADDRESS + "CombinedQuery.php";
UserFetchData task = new UserFetchData(this, user.latitude, user.longitude, user.id);
task.execute(url);
}
@Override
public void onFetchComplete(List<UserQueryData> data) {
// dismiss the progress dialog
if (dialog != null) dialog.dismiss();
// create new adapter
final UserAdapter adapter = new UserAdapter(this, data);
listView.setAdapter(adapter);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
final int userId = adapter.getItem(position).getId();
int i;
new DownloadImage(LocationSearch.this, userId + "_Profile").execute();
for (i = 2; i < 7; i++) {
new DownloadImage(LocationSearch.this, userId + "_Image" + Integer.toString(i)).execute();
}
ServerRequests serverRequests = new ServerRequests(LocationSearch.this);
serverRequests.fetchDifUserDataInBackground(userId, new GetDifUserCallback() {
@Override
public void done(DifUser returnedDifUser) {
if (returnedDifUser == null) {
String dir = getFilesDir().getAbsolutePath();
File file = new File(dir, userId + "_Profile.JPG");
boolean deleted = file.delete();
if (deleted) {
Log.d("THIS", "******************ProfileDeleted***********");
}
int i;
for (i = 2; i < 7; i++) {
String dir2 = getFilesDir().getAbsolutePath();
File file2 = new File(dir2, userId + "_Image" + Integer.toString(i) + ".JPG");
boolean deleted2 = file2.delete();
if (deleted2) {
Log.d("THIS", "******************Image" + Integer.toString(i) + "***********");
}
}
Toast.makeText(LocationSearch.this, "Something went wrong!", Toast.LENGTH_SHORT).show();
} else {
Intent userIdIntent = new Intent(LocationSearch.this, UserProfileOpened.class);
SharedPreferences sharedPref = getPreferences(Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPref.edit();
editor.putInt("userId", userId);
editor.commit();
userIdIntent.putExtra("userId", userId);
userIdIntent.putExtra("name", returnedDifUser.name);
userIdIntent.putExtra("city", returnedDifUser.city);
userIdIntent.putExtra("age", returnedDifUser.age);
userIdIntent.putExtra("gender", returnedDifUser.gender);
userIdIntent.putExtra("places", returnedDifUser.places);
userIdIntent.putExtra("relationship", returnedDifUser.relationship);
userIdIntent.putExtra("facebook", returnedDifUser.facebook);
startActivity(userIdIntent);
}
}
});
}
});
}
@Override
public void onFetchFailure(String msg) {
// dismiss the progress dialog
if (dialog != null) dialog.dismiss();
// show failure message
Toast.makeText(this, msg, Toast.LENGTH_LONG).show();
}
Если вам нужно что-нибудь еще, скажите, пожалуйста, и я буду править свой пост.
Я знаю, что когда мой lat/long изменяется, мне нужна помощь, связанная с действием, которое происходит после его изменения. Это включает в себя запуск асинтез в службе, так что оттуда данные, которые извлекаются из базы данных, заполняют listView в рамках Activity, в котором была запущена служба. –
Непонятно, что вы просите. Не могли бы вы пересмотреть свой вопрос и, возможно, указать, в чем проблема? – nukeforum
«Однако у меня есть служба LocationService, и в нем есть onLocationChanged(), который обновляется при изменении местоположения пользователя. Мой запрос/асинтекс выполняется каждый раз, когда местоположение изменяется, а затем заполняет мой списокView в моей активности». Я думал, что это достаточно ясно. Код, который я предоставил, находится в моей деятельности, но я хочу его в своей службе в onLocationChanged(), так что запрос выполняется каждый раз, когда изменяется местоположение пользователя. Который тогда и то же время заполнит мой listView новыми данными. –