2013-10-21 8 views
6

Ich habe den folgenden Code für meinen Anteil Dialog innerhalb des Fragments:Anteil Dialog funktioniert nicht

TabFour.java

public class TabFour extends Fragment { 
private UiLifecycleHelper uiHelper; 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    View rootView = inflater.inflate(R.layout.activity_tab_four, container, false); 

    return rootView; 
} 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    uiHelper = new UiLifecycleHelper(getActivity(), callback); 
    uiHelper.onCreate(savedInstanceState); 

    OpenGraphAction action = GraphObject.Factory.create(OpenGraphAction.class); 
    action.setProperty("book", "https://example.com/book/Snow-Crash.html"); 

    @SuppressWarnings("deprecation") 
    FacebookDialog shareDialog = new FacebookDialog.OpenGraphActionDialogBuilder(getActivity(), action, "books.reads", "book") 
      .build(); 
    uiHelper.trackPendingDialogCall(shareDialog.present()); 
} 


@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 

    uiHelper.onActivityResult(requestCode, resultCode, data, new FacebookDialog.Callback() { 
     @Override 
     public void onError(FacebookDialog.PendingCall pendingCall, Exception error, Bundle data) { 
      Log.e("Activity", String.format("Error: %s", error.toString())); 
     } 

     @Override 
     public void onComplete(FacebookDialog.PendingCall pendingCall, Bundle data) { 
      Log.i("Activity", "Success!"); 
     } 
    }); 
} 



@Override 
public void onResume() { 
    super.onResume(); 
    uiHelper.onResume(); 
} 

@Override 
public void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 
    uiHelper.onSaveInstanceState(outState); 
} 

@Override 
public void onPause() { 
    super.onPause(); 
    uiHelper.onPause(); 
} 

@Override 
public void onDestroy() { 
    super.onDestroy(); 
    uiHelper.onDestroy(); 
} 
private Session.StatusCallback callback = new Session.StatusCallback() { 


    @Override 
    public void call(Session session, SessionState state, 
      Exception exception) { 
     // TODO Auto-generated method stub 

    } 
}; 

}

Die Facebok Anteil Lasten auf dem Emulator jedoch Es ist nicht auf einem Telefon. Auch wenn der Freigabe-Dialog auf dem Emulator geladen wird, können Sie ihn nicht freigeben, da die Freigabe-Schaltfläche oben links deaktiviert ist (sichtbar, aber nicht anklickbar). Außerdem zeigt der Emulator eine Toastmeldung "Share Preview konnte nicht abgerufen werden" an. Bitte helfen Sie!

Ich hoffe, dass jemand mir das erklären kann. Vielen Dank!

+0

Haben Sie Facebook-App auf Ihrem Emulator? und überprüfe auch die Version der Facebook App. Siehst du irgendein adb Fehlerprotokoll? –

Antwort

0

Von https://developers.facebook.com/docs/android/share

Der Dialog Facebook funktioniert nur, wenn Facebook-App installiert ist. Die vorgeschlagene Methode besteht darin, zunächst zu prüfen, ob der Freigabe-Dialog angezeigt werden kann und wenn er vorzeigbar ist, ihn mit Ihrem Inhalt zu präsentieren oder einen Web-Dialog zu verwenden, um den Freigabe-Bildschirm zu präsentieren. d.h

if (FacebookDialog.canPresentShareDialog(getApplicationContext(), 
              FacebookDialog.ShareDialogFeature.SHARE_DIALOG)) 
{ 
     // Publish the post using the Share Dialog 
     FacebookDialog shareDialog = new FacebookDialog.ShareDialogBuilder(this) 
       .setLink("https://developers.facebook.com/android") 
       .build(); 
     uiHelper.trackPendingDialogCall(shareDialog.present()); 

} 
else 
{ 
     // Fallback. For example, publish the post using the Feed Dialog 
} 

Und hier ist das Beispiel der anderen Option

private void publishFeedDialog() { 
    Bundle params = new Bundle(); 
    params.putString("name", "Facebook SDK for Android"); 
    params.putString("caption", "Build great social apps and get more installs."); 
    params.putString("description", "The Facebook SDK for Android makes it easier and faster to develop Facebook integrated Android apps."); 
    params.putString("link", "https://developers.facebook.com/android"); 
    params.putString("picture", "https://raw.github.com/fbsamples/ios-3.x-howtos/master/Images/iossdk_logo.png"); 

    WebDialog feedDialog = (
     new WebDialog.FeedDialogBuilder(getActivity(), 
      Session.getActiveSession(), 
      params)) 
     .setOnCompleteListener(new OnCompleteListener() { 

      @Override 
      public void onComplete(Bundle values, 
       FacebookException error) { 
       if (error == null) { 
        // When the story is posted, echo the success 
        // and the post Id. 
        final String postId = values.getString("post_id"); 
        if (postId != null) { 
         Toast.makeText(getActivity(), 
          "Posted story, id: "+postId, 
          Toast.LENGTH_SHORT).show(); 
        } else { 
         // User clicked the Cancel button 
         Toast.makeText(getActivity().getApplicationContext(), 
          "Publish cancelled", 
          Toast.LENGTH_SHORT).show(); 
        } 
       } else if (error instanceof FacebookOperationCanceledException) { 
        // User clicked the "x" button 
        Toast.makeText(getActivity().getApplicationContext(), 
         "Publish cancelled", 
         Toast.LENGTH_SHORT).show(); 
       } else { 
        // Generic, ex: network error 
        Toast.makeText(getActivity().getApplicationContext(), 
         "Error posting story", 
         Toast.LENGTH_SHORT).show(); 
       } 
      } 

     }) 
     .build(); 
    feedDialog.show(); 
} 

Und nicht immer auf dem Emulator verlassen Dinge für dein Interesse an. Nach all dem ist es nur ein "Emulator". Sie können Ihre App einfach auf dem echten Gerät in der Vorschau anzeigen. Wenn also die Dinge nicht so laufen, wie sie sollen, verifizieren Sie sie auf dem echten Gerät auf dem Emulator. (Natürlich stimme ich zu, Emulator ist gut, wenn Sie nicht mehrere Geräte, Bildschirmgrößen usw. haben)

PS: Sie müssen auch Ihre Key Hashes ordnungsgemäß in der App-Einstellungen auf der fb-Entwickler-Website gesetzt haben.

Verwandte Themen