2016-07-30 10 views
0

Facebook SDKに接続し、Facebookにログインして壁にメッセージを投稿する、サンプルのAndroidアプリケーションを構築しようとしています。FacebookのログインからFacebookのログインからAndroidのインテントへLoginResultを渡す方法

LoginManager.getInstance().logInWithPublishPermissions(MainActivity.this, Arrays.asList("manage_pages,publish_pages")); 
     LoginManager.getInstance().registerCallback(callbackManager,new FacebookCallback<LoginResult>() { 
      @Override 
      public void onSuccess(LoginResult result) { 
       serialize_login sl = new serialize_login(); 
       sl.result=result; 
        Intent myIntent = new Intent(MainActivity.this,PublishMessage.class); 
       myIntent.putExtra("LoginResult",sl); 
       startActivity(myIntent); 

      } 

ログインが成功した場合は、メッセージの投稿を処理する別のアクティビティを呼び出す必要があります。私はそれを達成するためにaccessTokenが必要で、私はそれをIntentに渡そうとしています。インテントはStringを受け入れるだけなので、serialize_loginというシリアライズ可能なクラスを作成しました。受信側では、私はこれを行う

LoginResult lr = (LoginResult)myIntent.getExtras().getSerializable("result"); 
     GraphRequest request = GraphRequest.newPostRequest(lr.getAccessToken(), pageID 
       , null, new GraphRequest.Callback() { 

私は以下の例外があります。

Caused by: java.io.NotSerializableException: com.facebook.login.LoginResult 
                        at java.io.ObjectOutputStream.writeNewObject(ObjectOutputStream.java:1364) 
                        at java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.java:1671) 
                        at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1517) 

誰かが助けることができますか?シリアライズを行うには正しいことではない場合、どのように私は(文字列以外)の意図にオブジェクトを渡すん

答えて

0

FacebookのLoginResultSerializableインタフェースを実装していないJavaオブジェクトで、どちらもそれはParcelableインタフェースを実装していないん。 これが意味することは、意図を通して渡すことができないということです。

私は、LoginResultを次のアクティビティに渡す必要がある理由を強調し、インテントを通らずに必要な情報を取得するためのより良い方法を見つけることを提案します。あなたは、私が個人的にあなたのことをアドバイスしないであろうにもかかわらず、それを行う上で曲がっている場合


しかし、ここで何ができるかです:

あなたはLoginResultクラスのdocumentationを見ればここではAccessTokenrecentlyGrantedPermissionsrecentlyDeniedPermissionsを得ることができます。

また、AccessTokenのソースコードを見ると、Parcelableが実装されていることがわかります。つまり、intent.putExtra()でAccessTokenを渡すことができます。あなたが何かを行うことができます意味:

intent.putExtra("AccessToken", loginResult.getAccessToken()); 

他の方法getRecentlyDeniedPermissions()getRecentlyGrantedPermissions()それぞれがSet含む文字列を返します。それはSerializableをもParcelableどちらを実装しているため

自身が設定した、意図を経由して渡すことはできません、あなたは(Serializableを実装している)HashSetのまわりでそれをラップすることができます

intent.putSerializable("RecentlyGrantedPermissions", new HashSet<>(loginResult.getRecentlyGrantedPermissions()); 

これがない理由は2つあります。推奨:

  1. あなたは常にあるため、パフォーマンス上の理由で、代わりに可能SerializablesのParcelablesを渡すようにしてください。
  2. これはあまりにも多くのハッキングのように感じます。あなたがしたいことをするためのより良い方法がありそうです。
関連する問題