2015-06-18 76 views
0

我想开始活动A一个robospice请求,然后在活动B.收到请求的结果Robospice Android的 - 即在开始一个活动,结束另一个活动spiceRequest

在活动A

FetchSpiceRequest fetchSpiceRequest = new FetchSpiceRequest(); 
spiceManager.execute(fetchSpiceRequest, new ActivityB().postListener); 

的PostListener实现PendingRequestListener和坐在活动B.

内。在活动B

我们为在以下活动A中启动的待处理请求添加了监听器。

@Override 
protected void onStart() { 
    spiceManager.start(this); 
    spiceManager.addListenerIfPending(Post.class, 0, new PostListener()); 

然后,我们在下面的Activity B中实现PostListener。

public final class PostListener implements PendingRequestListener<Post> { 

    @Override 
    public void onRequestFailure(SpiceException spiceException) { 
     Toast.makeText(MainActivity.this, "Exception: " + spiceException.toString(), Toast.LENGTH_SHORT).show(); 
    } 

    @Override 
    public void onRequestSuccess(Post post) { 
     Toast.makeText(MainActivity.this, "Added", Toast.LENGTH_SHORT).show(); 

    } 

    @Override 
    public void onRequestNotFound() { 
     Toast.makeText(MainActivity.this, "Request not found", Toast.LENGTH_SHORT).show(); 
    } 
} 

最后,创建活动B中调用,这样A可以把它捡起来(例如,当我把新ActivityB()postListener。)一个变量:

public PostListener PostListener; 

这不起作用并且它总是在PostListener中调用onRequestNotFound。

我在做什么错?

我也看过这篇文章:Robospice - keep spice service continue running when changing activity但是@Snicolas似乎没有提到spiceManager.execute语句在第一个活动中的样子。

+0

您能否完全确定请求在活动更改期间没有真正完成? – nekojsi

+0

我不知道我想达到什么是可能的。我在这里阅读Snicolas的回应:http://stackoverflow.com/questions/19011200/how-does-robospice-manage-activity-lifecycle?rq = 1“基本上,RS发生的事情是,当一个请求正在处理时,只要相关活动处于活动状态,就会调用它的监听器。如果活动不再活动,它的所有监听器都会从RS中拔出,他们将不会被通知。“ – Simon

回答

0

最后,我不得不用LocalBroadcastManager要实现什么我想做的事:

活动A

FetchSpiceRequest fetchSpiceRequest = new FetchSpiceRequest(); 
spiceManager.execute(fetchSpiceRequest, postListener); 

请注意,postListener位于活动A.内它实际上没有做就像现在在本地广播接收机内执行所有的工作一样:

public final class AddPostListener implements RequestListener<Post> { 

    @Override 
    public void onRequestFailure(SpiceException spiceException) { 
     Toast.makeText(AddPostActivity.this, "Exception: " + spiceException.toString(), Toast.LENGTH_SHORT).show(); 
    } 

    @Override 
    public void onRequestSuccess(Post post) { 
     Toast.makeText(AddPostActivity.this, "Added", Toast.LENGTH_SHORT).show(); 
     Log.e("AddPostListener", "Background service finished"); } 

在fetchSpiceRe追求,我们异步执行工作,一旦完成,我们称之为localbroadcast经理送我们的结果反馈到活动B:

public class FetchSpiceRequest extends SpringAndroidSpiceRequest<Post> { 

    private Post mPost; 
    private Context mContext; 

    public AddPostSpiceRequest(Context context, Post post) { 
     super(Post.class); 
     mPost = post; 
     mContext = context; 
    } 

    @Override 
    public Post loadDataFromNetwork() throws Exception { 
//Do some network activity to get a post and then after the network activity ends, send the post through the broadcast activity to Activity B 
     Intent intent = new Intent("my-event"); 
     intent.putExtra("post", post); 
     LocalBroadcastManager.getInstance(mContext).sendBroadcast(intent); 
} 

活动B

注册您的localBroadcast接收器:

@Override 
public void onResume() { 
    super.onResume(); 
    LocalBroadcastManager.getInstance(this).registerReceiver(mMessageReceiver, 
      new IntentFilter("my-event")); } 

做一些与收到的消息:

private BroadcastReceiver mMessageReceiver = new BroadcastReceiver() { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     // Get extra data included in the Intent 
     Post post = intent.getParcelableExtra("post"); 
     Log.e("receiver", "Got message: " + post.getPostheader()); 
    } 
}; 
相关问题