簡體   English   中英

通過廣播接收器發布時,Facebook EOFException

[英]Facebook EOFException while posting through Broadcast Receiver

在我的應用程序中,我試圖在將來發布我的Facebook狀態,並實現我已創建的廣播接收器。 我使用PendingIntentAlarmManager通過MainActivity進行調用。 如果時間間隔在1或2分鍾之間,則狀態將成功發布。 但是如果時間跨度大於5分鍾,那么。 作為響應,我從Facebook的Request類中獲取了錯誤代碼為-1java.io.EOFException

請讓我知道如何稍后在后台發布狀態消息。 我也嘗試過服務,但在那我也得到了同樣的答復。

提前致謝。

我終於找到了解決該問題的方法,但是對於我來說似乎可行,但是不知道這是否是系統的方法。 早些時候,我試圖將狀態發布到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

FutureActivity.java

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只是一個沒有任何用戶界面的虛擬活動,它的主要目的是靜默登錄用戶並通過newMeRequest獲取用戶信息, newMeRequest萬一以確保我們有效,我試圖跳過newMeRequest但是后來我再次得到java.io.EOFExcepion並且在此方法內,我完成了編碼以發布狀態,並且即使在45分鍾的時間范圍內也成功發布了該狀態。

如果對您有幫助,請嘗試此過程並為該答案評分。 謝謝

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM