通过广播接收器发布时,Facebook EOF异常

时间:2014-07-26 15:45:52

标签: android facebook service broadcastreceiver

在我的应用程序中,我试图在未来时间发布我的 Facebook 状态,并且为了实现这一点,我创建了一个广播接收器。我使用 PendingIntent AlarmManager 通过 MainActivity 调用。如果时间跨度介于1或2分钟之间,则状态将成功发布。但如果时间跨度大于5分钟那么。我收到了来自Facebook的Request类的错误代码为java.io.EOFException的{​​{1}}作为回应。

请告诉我如何在以后的后台发布状态消息。我也尝试过服务,但我也得到了相同的回复。

先谢谢。

1 个答案:

答案 0 :(得分:0)

我终于找到了解决这个问题的方法,但它似乎适用于我的情况,但不知道这是一种系统的方式。之前我曾尝试在BroadcastReciever中发布状态,但获得了java.io.EOFException。因此,为了克服这个问题,我打开了Activity而不是BroadcastReciever,并在内部启动了登录过程,并在call(Session session, SessionState state, Exception exception)方法中执行了状态发布

这些是我遵循的步骤:

<强> MainActivity.java

Intent in = new Intent(this, FutureActivity.class);
in.putExtra("status", status);
PendingIntent pi = PendingIntent.getActivity(this, 0, in, PendingIntent.FLAG_ONE_SHOT);
AlarmManager manager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
manager.set(AlarmManager.RTC_WAKEUP, mCal.getTimeInMillis(), pi);

MainActivity我在FutureActivity存储的特定时间通过PendingIntent通过mCal致电Status mStatus; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mStatus = (Status) getIntent().getSerializableExtra("status"); new FacebookLogin(this).nativeLogin(true, this); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (Session.getActiveSession() != null) { Session.getActiveSession().onActivityResult(this, requestCode, resultCode, data); Session.setActiveSession(Session.getActiveSession()); } } @Override public void call(final Session session, SessionState state, Exception exception) { if (session.isOpened()) { Request.newMeRequest(session, new Request.GraphUserCallback() { @Override public void onCompleted(GraphUser user, Response response) { // here you can write the code to post the status mStatus.setSession(session); new PostStatus(mStatus).post(FutureActivity.this); // here you can write the code to post the status } }).executeAsync(); } }

<强> FutureActivity.java

newMeRequest

FutureActivity只是一个没有任何UI的虚拟活动,它的主要目的是以静默方式登录用户并通过newMeRequest获取用户的信息,以确保我们有效,我试过跳过java.io.EOFExcepion然后我再次获得{{1}}并在此方法中我已完成编码以发布状态,即使在 45分钟的时间段内也成功发布< /强>

如果对您有帮助,请尝试此过程并对此答案进行评分。 谢谢