Как получить данные из сервиса в активность, где задействован обратный вызов? - PullRequest
0 голосов
/ 25 марта 2012

Вот сценарий,

  • Я хочу получить Данные от Сервиса к Деятельности

  • Всякий раз, когда Служба получает новые данные с сервера, автоматически вызывается следующая функция (обратный вызов)

public void publishArrived(blah, blah) { //some operation here }

  • Как вернуть данные, полученные из вышеуказанной функции, в мою деятельность? (Я думаю, что я должен использовать «Messenger» здесь, но я не могу понять концепцию)

КОНТЕКСТ : В моей деятельности я выполняю операцию входа в систему, успех которой зависит от результата, приведенного выше, в publishArrived.

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 25 марта 2012

Предполагая, что вам нужно запускать действие и службу одновременно (а не запускать операцию после получения данных в службе), вы можете зарегистрировать BroadcastReceiver в своей активности, а затем один раз отправить широковещательное сообщение из службы.у вас есть данные.

Код для регистрации получателя вещания в вашей деятельности будет похож на этот, но вы будете определять свое собственное сообщение:
https://stackoverflow.com/a/2959290/483708

Для отправки пользовательских трансляций с вашего сервиса вы будете использовать это (поднято с http://www.vogella.de/articles/AndroidServices/article.html):

Intent intent = new Intent();
intent.setAction("de.vogella.android.mybroadcast");
sendBroadcast(intent);
0 голосов
/ 25 марта 2012

Вот решение для этого. Объявите строку перед вашим onCreate() методом, но внутри класса, как этот -

public static final String pass="com.your.application._something";

В вашем publishArrived методе вы можете сделать это -

String s="Pass this String";//If you want to pass an string
int id=10;//If you want to pass an integer
Intent i=new Intent(currentactivity.this,NewActivity.class);
i.putExtra(pass, id);//If you want to pass the string use i.putExtra(pass, s);
startActivity(i);

А теперь вы хотите отловить данные, предоставленные этим действием. Итак, в новом действии просто извлеките значение, как показано -

//this is for getting integer.
int a=getIntent().getExtras().getInt(CurrentActivity.pass);
//this is for getting String
String s=getIntent().getExtras(CurrentActivity.pass);

Примечание 1. На самом деле всегда следует передавать String, так как она может быть легко проанализирована как Integer.

Примечание 2: присвойте названия CurrentActivity и NewActivity в соответствующих местах.

Надеюсь, это поможет.

В вашем случае предположим, что логин "abc" и пароль "pqr" тогда вы можете передать это как String s=login+"*"+password; Это приведет к abc * pqr

Теперь в NewActivity просто анализируйте строку, пока не получите '*'. Получите ее индекс на indexOf('*'). Значение перед этим индексом - это Логин, а после него - пароль.

...