2015-03-30 101 views
0

我希望有人能帮助我!我想改变我的代码为新的Facebook SDK 4.0,但只有一点说明,我变得疯狂,不知道如何使用Facebook登录按钮和accesstoken新代码用Facebook SDK 4.0进行安卓登录

此代码的目标是用户使用他的Facebook帐户登录并检查用户是否已经退出。如果没有的话用电子邮件和Facebook的ID和名称

插入新的用户我已经标有需要改变// //和需要改变提前结束

感谢名单的任何帮助的代码!

import com.facebook.AccessToken; 
 
import com.facebook.CallbackManager; 
 
import com.facebook.FacebookCallback; 
 
import com.facebook.FacebookException; 
 
import com.facebook.FacebookSdk; 
 
import com.facebook.login.LoginResult; 
 
import com.facebook.login.widget.LoginButton; 
 
// import com.facebook.Request; 
 
//import com.facebook.Request.GraphUserCallback; 
 
// import com.facebook.Response; 
 
// import com.facebook.Session; 
 
// import com.facebook.SessionState; 
 
//import com.facebook.UiLifecycleHelper; 
 
// import com.facebook.model.GraphUser; 
 
// import com.facebook.widget.LoginButton; 
 

 
@SuppressLint("NewApi") 
 
public class AuthenticationFragment extends Fragment { 
 
    LoginButton facebookLoginButton; 
 
    // private UiLifecycleHelper uiHelper; 
 
    String TAG = "Fragment"; 
 
    Button btnLogin, btnCreateAccount; 
 
    ProgressDialog dialogPrg; 
 
    String userName = null; 
 

 
    // New Facebook Added 
 
    CallbackManager callbackManager; 
 

 

 
    public static final AuthenticationFragment newInstance() { 
 
     // TODO Auto-generated constructor stub 
 
     AuthenticationFragment fragment = new AuthenticationFragment(); 
 
     return fragment; 
 
    } 
 

 
    @Override 
 
    public void onAttach(Activity activity) { 
 
     // TODO Auto-generated method stub 
 
     super.onAttach(activity); 
 
    } 
 

 
    @Override 
 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
 
          Bundle savedInstanceState) { 
 
     // TODO Auto-generated method stub 
 
     View view = inflater.inflate(R.layout.authentication_layout, container, 
 
       false); 
 
     facebookLoginButton = (LoginButton) view 
 
       .findViewById(R.id.btnFacebookLogin); 
 
     facebookLoginButton.setFragment(this); 
 
     facebookLoginButton.setReadPermissions(Arrays.asList("email")); 
 

 

 
     // New added for Facebook 
 

 
     // Callback registration 
 
     facebookLoginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() { 
 
      @Override 
 
      public void onSuccess(LoginResult loginResult) { 
 
       // App code 
 

 
       //login ok get access token 
 
       AccessToken.getCurrentAccessToken(); 
 

 

 
      } 
 

 
      @Override 
 
      public void onCancel() { 
 
       // App code 
 

 

 

 
       Log.i(TAG, "facebook login canceled"); 
 
      } 
 

 
      @Override 
 
      public void onError(FacebookException exception) { 
 
       // App code 
 

 
       Log.i(TAG, "facebook login failed error"); 
 
      } 
 
     }); 
 
     //New added for Facebook END 
 

 

 

 

 

 

 
     btnLogin = (Button) view.findViewById(R.id.btn_login); 
 
     btnCreateAccount = (Button) view.findViewById(R.id.btn_create_account); 
 
     btnLogin.setOnClickListener(new View.OnClickListener() { 
 
      @Override 
 
      public void onClick(View v) { 
 
       Intent intent = new Intent(getActivity(), LoginActivity.class); 
 
       startActivity(intent); 
 
      } 
 
     }); 
 
     btnCreateAccount.setOnClickListener(new View.OnClickListener() { 
 

 
      @Override 
 
      public void onClick(View v) { 
 
       // TODO Auto-generated method stub 
 
       Intent intent = new Intent(getActivity(), 
 
         CreateAccountActivity.class); 
 
       startActivity(intent); 
 
      } 
 
     }); 
 
     dialogPrg = new ProgressDialog(getActivity()); 
 
     dialogPrg.setCanceledOnTouchOutside(false); 
 
     return view; 
 
    } 
 

 
    @Override 
 
    public void onCreate(Bundle savedInstanceState) { 
 
     super.onCreate(savedInstanceState); 
 

 

 
    // uiHelper = new UiLifecycleHelper(getActivity(), callback); 
 
    //  uiHelper.onCreate(savedInstanceState); 
 

 

 

 
    } 
 

 

 

 

 

 

 

 
// Needs to be changed 
 

 
    private Session.StatusCallback callback = new Session.StatusCallback() { 
 
     @Override 
 
     public void call(final Session session, final SessionState state, 
 
         final Exception exception) { 
 
      onSessionStateChange(session, state, exception); 
 
     } 
 
    }; 
 

 
    // Needs to be changed END 
 

 

 

 
    private void onSessionStateChange(Session session, SessionState state, 
 
             Exception exception) { 
 
     if (state.isOpened()) { 
 
      Log.i("FB AUT FRAGMENT", "Logged in..."); 
 
     } else if (state.isClosed()) { 
 
      Log.i("FB AUT FRAGMENT", "Logged out..."); 
 
     } 
 
    } 
 

 

 
    // Needs to be changed 
 

 
    private void insertUser(Session session) { 
 
     Request.newMeRequest(session, new GraphUserCallback() { 
 
      @Override 
 
      public void onCompleted(GraphUser user, Response response) { 
 
       // TODO Auto-generated method stub 
 
       new facebookUserCheck(user).start(); 
 
      } 
 
     }).executeAsync(); 
 
    } 
 

 
    // Needs to be changed END 
 

 

 
    // Needs to be changed 
 

 
    private class facebookUserCheck extends Thread { 
 
     GraphUser user; 
 

 
     public facebookUserCheck(GraphUser user) { 
 
      // TODO Auto-generated constructor stub 
 
      this.user = user; 
 
     } 
 

 
     // Needs to be changed 
 

 

 

 
     @Override 
 
     public void run() { 
 
      // TODO Auto-generated method stub 
 
      super.run(); 
 
      // TODO Auto-generated method stub 
 
      String handleInsertUser = getActivity().getResources().getString(
 
        R.string.users_json_url) 
 
        + "facebook_user_check"; 
 
      try { 
 
       HttpClient client = new DefaultHttpClient(); 
 
       HttpPost post = new HttpPost(handleInsertUser); 
 
       MultipartEntity reqEntity = new MultipartEntity(); 
 

 

 
// Needs to be changed user.getId 
 
       
 
       reqEntity.addPart("fb_id", new StringBody(user.getId())); 
 
// Needs to be changed END 
 
       
 

 
       post.setEntity(reqEntity); 
 
       HttpResponse res = client.execute(post); 
 
       HttpEntity resEntity = res.getEntity(); 
 
       final String response_str = EntityUtils.toString(resEntity); 
 
       if (resEntity != null) { 
 
        Log.i(TAG, response_str); 
 
        getActivity().runOnUiThread(new Runnable() { 
 
         public void run() { 
 
          try { 
 
           dialogPrg.dismiss(); 
 
           JSONArray jsonArray = new JSONArray(
 
             response_str); 
 
           if (jsonArray.length() == 1) { 
 
            JSONObject obj = jsonArray.getJSONObject(0); 
 
            User user = Ultils.parseUser(obj); 
 
            UserSessionManager userSession = new UserSessionManager(
 
              getActivity()); 
 
            userSession.storeUserSession(user); 
 
            Intent intent = new Intent(getActivity(), 
 
              HomeActivity.class); 
 
            intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK 
 
              | Intent.FLAG_ACTIVITY_NEW_TASK); 
 
            startActivity(intent); 
 
           } 
 
          } catch (Exception e) { 
 
           LayoutInflater inflater = LayoutInflater 
 
             .from(getActivity()); 
 
           View promptsView = inflater.inflate(
 
             R.layout.username_promtps_layout, null); 
 

 
           AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(
 
             getActivity()); 
 

 
           // set prompts.xml to alertdialog builder 
 
           alertDialogBuilder.setView(promptsView); 
 

 
           final EditText message = (EditText) promptsView 
 
             .findViewById(R.id.editTextDialogUserInput); 
 
           alertDialogBuilder 
 
             .setMessage(getResources().getString(
 
               R.string.choose_your_user_name)); 
 
           // set dialog message 
 
           alertDialogBuilder 
 
             .setCancelable(false) 
 
             .setPositiveButton(
 
               getResources().getString(
 
                 R.string.ok_label), 
 
               new DialogInterface.OnClickListener() { 
 
                public void onClick(
 

 
                  DialogInterface dialog, 
 
                  int id) { 
 
                 if (!Validator 
 
                   .validUserName(message 
 
                     .getText() 
 
                     .toString())) { 
 
                  showDialog(getResources() 
 
                    .getString(
 
                      R.string.invalid_user_name)); 
 
                  return; 
 
                 } 
 
                 userName = message 
 
                   .getText() 
 
                   .toString(); 
 
                 new facebookUserRegister(
 
                   user).start(); 
 
                } 
 
               }); 
 

 
           // create alert dialog 
 
           AlertDialog alertDialog = alertDialogBuilder 
 
             .create(); 
 

 
           // show it 
 
           alertDialog.show(); 
 
          } 
 
         } 
 
        }); 
 
       } 
 
      } catch (Exception e) { 
 
       // TODO: handle exception 
 
       e.printStackTrace(); 
 
      } 
 
     } 
 
    } 
 

 
    // Needs to be changed 
 
    
 
    private class facebookUserRegister extends Thread { 
 
     GraphUser user; 
 

 
     public facebookUserRegister(GraphUser user) { 
 
      // TODO Auto-generated constructor stub 
 
      this.user = user; 
 
     } 
 

 
     // Needs to be changed END 
 
     
 
     
 
     
 
     @Override 
 
     public void run() { 
 
      super.run(); 
 
      getActivity().runOnUiThread(new Runnable() { 
 
       @Override 
 
       public void run() { 
 
        // TODO Auto-generated method stub 
 
        dialogPrg.show(); 
 
       } 
 
      }); 
 
      String handleInsertUser = getActivity().getResources().getString(
 
        R.string.users_json_url) 
 
        + "facebook_user_register"; 
 
      try { 
 
       HttpClient client = new DefaultHttpClient(); 
 
       HttpPost post = new HttpPost(handleInsertUser); 
 
       MultipartEntity reqEntity = new MultipartEntity(); 
 

 

 
       // Needs to be changed user.getId, user.getName, user.asMap 
 
       
 
       reqEntity.addPart("fb_id", new StringBody(user.getId())); 
 
       reqEntity.addPart("fullname", new StringBody(user.getName())); 
 
       reqEntity.addPart("email", new StringBody(user.asMap().get("email").toString())); 
 
       // Needs to be changed END 
 

 

 
       reqEntity.addPart("username", new StringBody(userName)); 
 
       post.setEntity(reqEntity); 
 
       HttpResponse res = client.execute(post); 
 
       HttpEntity resEntity = res.getEntity(); 
 
       final String response_str = EntityUtils.toString(resEntity); 
 
       if (resEntity != null) { 
 
        Log.i(TAG, response_str); 
 
        getActivity().runOnUiThread(new Runnable() { 
 
         public void run() { 
 
          try { 
 
           dialogPrg.dismiss(); 
 
           JSONObject jsonObj = new JSONObject(
 
             response_str); 
 
           if (jsonObj.getString("ok").equals("0")) { 
 
            // show error email; 
 
            showDialog(getActivity().getResources() 
 
              .getString(R.string.email_exist)); 
 
            return; 
 
           } 
 

 
           if (jsonObj.getString("ok").equals("1")) { 
 
            // show error username 
 
            showDialog(getActivity() 
 
              .getResources() 
 
              .getString(R.string.user_name_exist)); 
 
            return; 
 
           } 
 

 
           if (jsonObj.getString("ok").equals("2")) { 
 
            // show unknow username 
 
            showDialog(getActivity().getResources() 
 
              .getString(R.string.login_failed)); 
 
            return; 
 
           } 
 

 
          } catch (Exception e) { 
 
           JSONArray jsonArray; 
 
           try { 
 
            jsonArray = new JSONArray(response_str); 
 
            if (jsonArray.length() == 1) { 
 
             JSONObject obj = jsonArray 
 
               .getJSONObject(0); 
 
             User user = Ultils.parseUser(obj); 
 
             UserSessionManager userSession = new UserSessionManager(
 
               getActivity()); 
 
             userSession.storeUserSession(user); 
 
             Intent intent = new Intent(
 
               getActivity(), 
 
               HomeActivity.class); 
 
             intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK 
 
               | Intent.FLAG_ACTIVITY_NEW_TASK); 
 
             startActivity(intent); 
 
            } 
 
           } catch (JSONException e1) { 
 
            // TODO Auto-generated catch block 
 
            e1.printStackTrace(); 
 
            showDialog(getActivity().getResources() 
 
              .getString(R.string.login_failed)); 
 
           } 
 

 
          } 
 
         } 
 
        }); 
 
       } 
 
      } catch (Exception e) { 
 
       // TODO: handle exception 
 
       e.printStackTrace(); 
 
      } 
 
     } 
 
    } 
 

 

 
    // Needs to be changed 
 
    
 
    @Override 
 
    public void onResume() { 
 
     super.onResume(); 
 

 

 
     Session session = Session.getActiveSession(); 
 
     if (session != null && (session.isOpened() || session.isClosed())) { 
 
      onSessionStateChange(session, session.getState(), null); 
 
     } 
 

 
     // uiHelper.onResume(); 
 
    } 
 

 
    // Needs to be changed END 
 
    
 
    
 
    
 
    @Override 
 
    public void onActivityResult(int requestCode, int resultCode, Intent data) { 
 
     super.onActivityResult(requestCode, resultCode, data); 
 

 
     // New Facebook added 
 
     callbackManager.onActivityResult(requestCode, resultCode, data); 
 
     //New Facebook added END 
 

 

 

 
     // uiHelper.onActivityResult(requestCode, resultCode, data); 
 

 

 
// Needs to be changed 
 

 
     if (Session.getActiveSession() != null 
 
       && Session.getActiveSession().isOpened()) { 
 
      dialogPrg.setMessage(getActivity().getResources().getString(
 
        R.string.loging)); 
 
      dialogPrg.show(); 
 
      facebookLoginButton.setEnabled(false); 
 
      insertUser(Session.getActiveSession()); 
 
     } 
 
    } 
 
// Needs to be changed END 
 
    
 
    
 
    
 
    
 
    
 
    @Override 
 
    public void onPause() { 
 
     super.onPause(); 
 
     // uiHelper.onPause(); 
 

 
    } 
 

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

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

 
    public void showDialog(String message) { 
 
     Ultils.logout(getActivity()); 
 
     AlertDialog.Builder buidler = new AlertDialog.Builder(getActivity()); 
 
     buidler.setMessage(message); 
 
     buidler.setPositiveButton(
 
       getActivity().getResources().getString(R.string.ok_label), 
 
       new DialogInterface.OnClickListener() { 
 

 
        @Override 
 
        public void onClick(DialogInterface dialog, int which) { 
 
         // TODO Auto-generated method 
 
         // stub 
 
         facebookLoginButton.setEnabled(true); 
 
        } 
 
       }); 
 
     AlertDialog dialog = buidler.create(); 
 
     dialog.show(); 
 
    } 
 

 
}

+0

你似乎没有用实际的实例初始化你的callbackManager。你应该尝试添加callbackManager = CallbackManager.Factory.create();在你的onCreateView中,就在你调用facebookLoginButton.registerCallback之前。 – 2015-03-30 23:49:50

+0

嗨,是的,迄今为止,我已经把这个在AuthenticationActivity ....但对我来说很重要,我可以改变代码再次与facebook sdk 4.0一起工作 – Frank 2015-03-31 01:22:25

+0

你在AuthenticationActivity中放了什么? callbackManager的初始化?你可以在那里显示代码吗?这是真正获得登录结果的关键部分。 – 2015-03-31 01:42:33

回答

0

使用此代码段为Facebook登录。像我的应用程序中的魅力一样工作。

import java.util.Arrays; 
 
import java.util.Date; 
 
import java.util.List; 
 
import com.facebook.AppEventsLogger; 
 
import com.facebook.FacebookAuthorizationException; 
 
import com.facebook.FacebookOperationCanceledException; 
 
import com.facebook.FacebookRequestError; 
 
import com.facebook.Request; 
 
import com.facebook.Response; 
 
import com.facebook.Session; 
 
import com.facebook.SessionState; 
 
import com.facebook.UiLifecycleHelper; 
 
import com.facebook.model.GraphObject; 
 
import com.facebook.model.GraphPlace; 
 
import com.facebook.model.GraphUser; 
 
import com.facebook.widget.FacebookDialog; 
 
import com.facebook.widget.LoginButton; 
 
import com.facebook.widget.ProfilePictureView; 
 
import com.ids.service.R; 
 
import android.support.v4.app.FragmentActivity; 
 
import android.app.AlertDialog; 
 
import android.content.Intent; 
 
import android.graphics.Bitmap; 
 
import android.graphics.BitmapFactory; 
 
import android.os.Bundle; 
 
import android.util.Log; 
 

 
public class MainActivity extends FragmentActivity { 
 

 
\t  private final String PENDING_ACTION_BUNDLE_KEY = "com.facebook.samples.hellofacebook:PendingAction"; 
 

 
\t  
 
\t  private LoginButton loginButton; 
 
\t  private ProfilePictureView profilePictureView; 
 
\t  private PendingAction pendingAction = PendingAction.NONE; 
 
\t  private GraphUser user; 
 
\t  private GraphPlace place; 
 
\t  private List<GraphUser> tags; 
 
\t  private boolean canPresentShareDialog; 
 
\t  private boolean canPresentShareDialogWithPhotos; 
 

 
\t  private enum PendingAction { 
 
\t   NONE, 
 
\t   POST_PHOTO, 
 
\t   POST_STATUS_UPDATE 
 
\t  } 
 
\t  private UiLifecycleHelper uiHelper; 
 

 
\t  private Session.StatusCallback callback = new Session.StatusCallback() { 
 

 
\t \t \t @Override 
 
\t \t \t public void call(Session session, SessionState state, 
 
\t \t \t \t \t Exception exception) { 
 
\t \t \t \t onSessionStateChange(session, state, exception); 
 
\t \t \t } 
 
\t  }; 
 

 
\t  private FacebookDialog.Callback dialogCallback = new FacebookDialog.Callback() { 
 
\t   @Override 
 
\t   public void onError(FacebookDialog.PendingCall pendingCall, Exception error, Bundle data) { 
 
\t    Log.d("Facebook", String.format("Error: %s", error.toString())); 
 
\t   } 
 

 
\t   @Override 
 
\t   public void onComplete(FacebookDialog.PendingCall pendingCall, Bundle data) { 
 
\t    Log.d("Facebook", "Success!"); 
 
\t   } 
 
\t  }; 
 
\t 
 
\t @Override 
 
\t protected void onCreate(Bundle savedInstanceState) { 
 
\t \t super.onCreate(savedInstanceState); 
 
\t \t uiHelper = new UiLifecycleHelper(this, callback); 
 
     uiHelper.onCreate(savedInstanceState); 
 

 
     if (savedInstanceState != null) { 
 
      String name = savedInstanceState.getString(PENDING_ACTION_BUNDLE_KEY); 
 
      pendingAction = PendingAction.valueOf(name); 
 
     } 
 

 
     setContentView(R.layout.activity_main); 
 
     profilePictureView = (ProfilePictureView) findViewById(R.id.profilePicture); 
 
     loginButton = (LoginButton) findViewById(R.id.login_button); 
 
     loginButton.setUserInfoChangedCallback(new LoginButton.UserInfoChangedCallback() { 
 
      @Override 
 
      public void onUserInfoFetched(GraphUser user) { 
 
       MainActivity.this.user = user; 
 
       updateUI(); 
 
       // It's possible that we were waiting for this.user to be populated in order to post a 
 
       // status update. 
 
       handlePendingAction(); 
 
      } 
 
     }); 
 
\t } 
 

 
\t @Override 
 
\t  protected void onResume() { 
 
\t   super.onResume(); 
 
\t   uiHelper.onResume(); 
 

 
\t   // Call the 'activateApp' method to log an app event for use in analytics and advertising reporting. Do so in 
 
\t   // the onResume methods of the primary Activities that an app may be launched into. 
 
\t   AppEventsLogger.activateApp(this); 
 

 
\t   updateUI(); 
 
\t  } 
 

 
\t  @Override 
 
\t  protected void onSaveInstanceState(Bundle outState) { 
 
\t   super.onSaveInstanceState(outState); 
 
\t   uiHelper.onSaveInstanceState(outState); 
 

 
\t   outState.putString(PENDING_ACTION_BUNDLE_KEY, pendingAction.name()); 
 
\t  } 
 

 
\t  @Override 
 
\t  protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
 
\t   super.onActivityResult(requestCode, resultCode, data); 
 
\t   uiHelper.onActivityResult(requestCode, resultCode, data, dialogCallback); 
 
\t  } 
 

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

 
\t   // Call the 'deactivateApp' method to log an app event for use in analytics and advertising 
 
\t   // reporting. Do so in the onPause methods of the primary Activities that an app may be launched into. 
 
\t   AppEventsLogger.deactivateApp(this); 
 
\t  } 
 

 
\t  @Override 
 
\t  public void onDestroy() { 
 
\t   super.onDestroy(); 
 
\t   uiHelper.onDestroy(); 
 
\t  } 
 

 
\t  private void onSessionStateChange(Session session, SessionState state, Exception exception) { 
 
\t   if (pendingAction != PendingAction.NONE && 
 
\t     (exception instanceof FacebookOperationCanceledException || 
 
\t     exception instanceof FacebookAuthorizationException)) { 
 
\t     new AlertDialog.Builder(MainActivity.this) 
 
\t      .setTitle(R.string.cancelled) 
 
\t      .setMessage(R.string.permission_not_granted) 
 
\t      .setPositiveButton(R.string.ok, null) 
 
\t      .show(); 
 
\t    pendingAction = PendingAction.NONE; 
 
\t   } else if (state == SessionState.OPENED_TOKEN_UPDATED) { 
 
\t    handlePendingAction(); 
 
\t   } 
 
\t   updateUI(); 
 
\t  } 
 

 
\t  @SuppressWarnings("unused") 
 
\t \t private void updateUI() { 
 
\t   Session session = Session.getActiveSession(); 
 
\t   if (user != null) { 
 
\t   \t profilePictureView.setProfileId(user.getId()); 
 
\t   \t Log.e("Name", user.getName()); 
 
\t   } 
 
\t  } 
 

 
\t  @SuppressWarnings("incomplete-switch") 
 
\t  private void handlePendingAction() { 
 
\t   PendingAction previouslyPendingAction = pendingAction; 
 
\t   // These actions may re-set pendingAction if they are still pending, but we assume they 
 
\t   // will succeed. 
 
\t   pendingAction = PendingAction.NONE; 
 

 
\t   switch (previouslyPendingAction) { 
 
\t    case POST_PHOTO: 
 
\t     postPhoto(); 
 
\t     break; 
 
\t    case POST_STATUS_UPDATE: 
 
\t     postStatusUpdate(); 
 
\t     break; 
 
\t   } 
 
\t  } 
 

 
\t  private interface GraphObjectWithId extends GraphObject { 
 
\t   String getId(); 
 
\t  } 
 

 
\t  private void showPublishResult(String message, GraphObject result, FacebookRequestError error) { 
 
\t   String title = null; 
 
\t   String alertMessage = null; 
 
\t   if (error == null) { 
 
\t    title = getString(R.string.success); 
 
\t    String id = result.cast(GraphObjectWithId.class).getId(); 
 
\t    alertMessage = getString(R.string.successfully_posted_post, message, id); 
 
\t   } else { 
 
\t    title = getString(R.string.error); 
 
\t    alertMessage = error.getErrorMessage(); 
 
\t   } 
 

 
\t   new AlertDialog.Builder(this) 
 
\t     .setTitle(title) 
 
\t     .setMessage(alertMessage) 
 
\t     .setPositiveButton(R.string.ok, null) 
 
\t     .show(); 
 
\t  } 
 

 
\t  
 

 
\t  private FacebookDialog.ShareDialogBuilder createShareDialogBuilderForLink() { 
 
\t   return new FacebookDialog.ShareDialogBuilder(this) 
 
\t     .setName("Hello Facebook") 
 
\t     .setDescription("The 'Hello Facebook' sample application showcases simple Facebook integration") 
 
\t     .setLink("http://developers.facebook.com/android"); 
 
\t  } 
 

 
\t  private void postStatusUpdate() { 
 
\t   if (canPresentShareDialog) { 
 
\t    FacebookDialog shareDialog = createShareDialogBuilderForLink().build(); 
 
\t    uiHelper.trackPendingDialogCall(shareDialog.present()); 
 
\t   } else if (user != null && hasPublishPermission()) { 
 
\t    final String message = getString(R.string.status_update, user.getFirstName(), (new Date().toString())); 
 
\t    Request request = Request 
 
\t      .newStatusUpdateRequest(Session.getActiveSession(), message, place, tags, new Request.Callback() { 
 
\t       @Override 
 
\t       public void onCompleted(Response response) { 
 
\t        showPublishResult(message, response.getGraphObject(), response.getError()); 
 
\t       } 
 
\t      }); 
 
\t    request.executeAsync(); 
 
\t   } else { 
 
\t    pendingAction = PendingAction.POST_STATUS_UPDATE; 
 
\t   } 
 
\t  } 
 

 
\t  
 
\t  private FacebookDialog.PhotoShareDialogBuilder createShareDialogBuilderForPhoto(Bitmap... photos) { 
 
\t   return new FacebookDialog.PhotoShareDialogBuilder(this) 
 
\t     .addPhotos(Arrays.asList(photos)); 
 
\t  } 
 

 
\t  private void postPhoto() { 
 
\t   Bitmap image = BitmapFactory.decodeResource(this.getResources(), R.drawable.ic_launcher); 
 
\t   if (canPresentShareDialogWithPhotos) { 
 
\t    FacebookDialog shareDialog = createShareDialogBuilderForPhoto(image).build(); 
 
\t    uiHelper.trackPendingDialogCall(shareDialog.present()); 
 
\t   } else if (hasPublishPermission()) { 
 
\t    Request request = Request.newUploadPhotoRequest(Session.getActiveSession(), image, new Request.Callback() { 
 
\t     @Override 
 
\t     public void onCompleted(Response response) { 
 
\t      showPublishResult(getString(R.string.photo_post), response.getGraphObject(), response.getError()); 
 
\t     } 
 
\t    }); 
 
\t    request.executeAsync(); 
 
\t   } else { 
 
\t    pendingAction = PendingAction.POST_PHOTO; 
 
\t   } 
 
\t  } 
 
\t  
 
\t  private boolean hasPublishPermission() { 
 
\t   Session session = Session.getActiveSession(); 
 
\t   return session != null && session.getPermissions().contains("publish_actions"); 
 
\t  } \t 
 
}

+0

你好thanx回答Varun,但我的代码也工作得很好。也许是误会!我想更改代码以与新的Facebook sdk 4.0兼容 – Frank 2015-03-31 13:02:26