AsyncTask внутри службы, заполняющей ListView

У меня есть этот кусок кода, который я собираюсь предоставить ниже. Он публикует идентификатор пользователя, широту и долготу, которые в php обновляют текущих пользователей по широте и долготе, а затем выполняет запрос, который извлекает массив пользователей, которые находятся в определенной области вокруг вас. (Получает возраст, имя …). Таким образом, заполняется список, но запрос должен быть выполнен вручную, через обновление или при открытии действия. Однако у меня есть 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();
}

Если вам нужно что-то еще, пожалуйста, скажите это, и я отредактирую свой пост.

2

Решение

Изменить: дать IntentЭто выстрел.

Сделать Intent действие так:

public static String QUERY = "com.package.QUERY";

Затем продлите BroadcastReceiver в вашей деятельности:

private class QueryReceiver extends BroadcastReceiver {
@Override
public void OnReceive(Context c, Intent i) {
startQueryView(); /*running your query when receiving an Intent*/
}
}

Тогда в вашей деятельности OnCreate() метод, настроить слушателя:

IntentFilter filter = new IntentFilter(QUERY);
receiver = new QueryReceiver();
registerReceiver(receiver,filter); /* registering the receiver to receive only intents with the action QUERY */

Наконец, в локации слушателя, отстреливайте Intent:

Intent i = new Intent(QUERY);
sendBroadcast(i);

Вы должны взглянуть на документацию для LocationListener,

http://developer.android.com/reference/android/location/LocationListener.html

Используя это, вы будете знать, когда ваш пользователь меняет широту / долготу!

2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector