1

Facebookのアルバムをダウンロードするために公式のFacebook SDKを使用するアプリケーションがあります。最近、コードを更新して、新しい FB Android SDK 3.0 を組み込みました。

私の最初のアクティビティは FB 認証を開始し、友人のリストを要求し、インテントを使用して選択した友人のグラフ ID を 2 番目のアクティビティに送信します。

2 番目のアクティビティを開始するためのコードを変更していませんが、android.view.windowleaked 例外が発生しました。そこで、最初のアクティビティの onPause 関数と onStop 関数で進行状況ダイアログの却下関数を呼び出しました。その後、エラーは消えました。

しかし、2 番目のアクティビティはまだ前面に表示されていません。また、例外はありません。これが私のコードです。

album_intent = new Intent();
album_intent.putExtra("id",graph_id);
album_intent.putExtra("name",selected_friend.toString());
//album_intent.setComponent(new ComponentName(Barebone_fbActivity.this, album_selector.class));
album_intent.setClass(this, album_selector.class);

album_intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
//Context context = getApplicationContext();
//context.startActivity(album_intent);
try
{
    getApplicationContext().startActivity(album_intent);
}
catch(ActivityNotFoundException ex)
{
ex.printStackTrace();
}

2 番目のアクティビティの onCreate メソッドにトーストを追加しました。驚いたことに、トーストは表示されますが、アクティビティ自体は表示されません。マニフェスト ファイルも確認しましたが、何も変更していません。ログインからグラフAPIリクエストまでほとんどすべてが変更されたため、FB Android SDK 3.0が疑われます。問題を見つけるのを手伝ってください。

私のアプリケーションのすべてのアクティビティは、StatusCallback を実装しています。ここでは、album_selector アクティビティのライフサイクル メソッドを示します。StatusCallback の「call」メソッドは長いので含まれていません。また、2 番目のアクティビティは ListActivity を拡張します。

@Override
public void onCreate(Bundle savedInstanceState)
{
    //locks the screen in portrait mode
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    Toast.makeText(this, "Voila", Toast.LENGTH_SHORT).show();
    this.setVisible(true);

    dialog = ProgressDialog.show(album_selector.this, "", getText(R.string.loading));

    //pressing back button dismisses the progress dialog
    dialog.setCancelable(true);

    //get friend_name and friend_id from the intent which started this activity
    Intent starting_intent = getIntent();
    friend_id = starting_intent.getStringExtra("id");
    friend_name = starting_intent.getStringExtra("name");

    lv = getListView();

    Session currentSession = Session.getActiveSession();
    if(currentSession == null || currentSession.getState().isClosed())
    {
        Session session = Session.openActiveSession(this, true, this);
        //Session session = Session.restoreSession(this, null, this, bundle);
        currentSession = session;
    }
    if (currentSession != null && !currentSession.isOpened())
    {
        OpenRequest openRequest = new OpenRequest(this).setCallback(this);
        if(openRequest == null)
        {
            openRequest.setDefaultAudience(SessionDefaultAudience.FRIENDS);
            openRequest.setPermissions(Arrays.asList(permissions));
            openRequest.setLoginBehavior(SessionLoginBehavior.SSO_WITH_FALLBACK);
            currentSession.openForRead(openRequest);
        }
    }
    dialog.dismiss();
}

public void onActivityResult(int requestCode, int resultCode, Intent data)
{
    super.onActivityResult(requestCode, resultCode, data);
    Session.getActiveSession().onActivityResult(this, requestCode, resultCode, data);
}

protected void onStop()
{
    super.onPause();
    album_selector.this.dialog.dismiss();
}

protected void onPause()
{
    super.onPause();
    album_selector.this.dialog.dismiss();
}
4

5 に答える 5

1

アクティビティがロードされて実行されているが、表示されないという同様の問題がありました。

問題は、AndroidManifest.XML で、アクティビティに NoDisplay として定義されたテーマがあることでした。

android:theme="@android:style/Theme.NoDisplay"

アクティビティから上記の属性を削除すると、再び表示されるようになりました。

于 2014-06-18T17:54:25.890 に答える
0

私は同じ問題を抱えていましたが、自動入力であることが判明しました。オートフィルを削除する

 android:autofillHints=""
于 2021-06-29T06:41:37.937 に答える