如何从服务获取数据涉及回调涉及的活动?

时间:2012-03-25 19:27:43

标签: java android android-intent android-service android-activity

这是方案,

  • 我想从服务中获取数据到活动

  • 每当服务从服务器获取新数据时,自动调用以下函数(回调)

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

  • 如何将从上述功能获取的数据恢复到我的活动中? (我想我应该使用" Messenger"这里但我无法理解这个概念)

语境:在我的活动中,我执行登录操作,其成功取决于在publishArrived中到达的上述结果。

先谢谢。

2 个答案:

答案 0 :(得分:1)

假设您需要同时启动活动和服务(而不是在服务中接收数据后启动活动),您可以在活动中注册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);

答案 1 :(得分:0)

这是解决方案。 在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('*')获取其索引。此索引之前的值是Login,此后的值将是密码。