0

我正在使用 parse.com,并且正在尝试使用 facebook 登录。每件事都运行顺利,直到登录过程完成并假设调用回调。发生的情况是(在 FB 登录过程完成后)应用程序崩溃,崩溃时没有显示任何消息,logcat 也没有显示任何信息。我完全迷路了。

这是我的代码:

fbloginButton.setOnClickListener(new OnClickListener() 
         {
             @Override
             public void onClick(View view)
            {
                 //ProgressDialog progress  = ProgressDialog.show(thisActivity, "Please wait", "Loading please wait..", true);
                 //login.fbLogin(thisActivity);
                 ParseFacebookUtils.logIn(Arrays.asList("email"), thisActivity, new LogInCallback() 
                    {
                        @Override
                        public void done(ParseUser user, ParseException err) 
                        {
                            if (user == null) 
                            {
                                Log.d("MyApp", "Uh oh. The user cancelled the Facebook login.");
                                Toast toast = Toast.makeText(thisActivity, "Facebook login failed", Toast.LENGTH_LONG);
                                //progress.dismiss();
                                toast.show();
                            } 
                            else if (user.isNew()) 
                            {
                                Log.d("MyApp", "User signed up and logged in through Facebook!");
                                Intent mainPage = new Intent(thisActivity, MainPage.class);
                                DBAdapter db = new DBAdapter(context);
                                db.open();
                                db.setLoginStatus(DBAdapter.LOGEDIN);
                                db.close();
                                //progress.dismiss();
                                thisActivity.startActivity(mainPage);

                            } 
                            else 
                            {
                                Log.d("MyApp", "User logged in through Facebook!");
                                Intent mainPage = new Intent(thisActivity, MainPage.class);
                                DBAdapter db = new DBAdapter(context);
                                db.open();
                                db.setLoginStatus(DBAdapter.LOGEDIN);
                                db.close();
                                //progress.dismiss();
                                thisActivity.startActivity(mainPage);
                            }
                        }
                    });
            }
         });

不知道这是否重要,但这里是onActivityResult代码:

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

我正在使用 facbook 3.0 sdk 并解析 1.3 sdk 版本。

编辑 *编辑: * 我想我找到了问题的根源,当我试图访问我正在获取此页面的声明时:类文件编辑器(logIn)。此外,我通过从库中删除旧的 sdk 并添加新的 sdk 及其内容(总共 4 个文件和文件夹),将我的 parse sdk 版本从 1.2.4 更新到 1.3。ParseFacebookUtilsthe jar of this class file belongs to container 'android dependencies' which does not allow modification to source attachments on its entries.

谢谢。

4

2 回答 2

0

崩溃的可能原因放在第二个和最后一个 else 子句中。您正在尝试在 UI 线程上执行一些数据库操作,这是非法的并在 Android >= 4.0 上引发异常。这种类型的操作应该在不同的线程上完成,这可以通过使用AsyncTaskIntentService来完成。

于 2013-06-23T22:38:17.737 回答
0

弗拉德。您的 onActivityResult 必须是:

   @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        ParseFacebookUtils.finishAuthentication(requestCode, resultCode, data);
    }

原因Session.getActiveSesion()返回null,原因解析自己管理会话。

并且不要忘记在 initalize Parse 中添加 FACEBOOK_APP_ID:

public class ParseApplication extends Application {

    @Override
    public void onCreate() {
        super.onCreate();
        // Add your initialization code here
        Parse.initialize(this, Constants.APPLICATION_ID, Constants.CLIENT_KEY);
        ParseFacebookUtils.initialize(Constants.FACEBOOK_APP_ID);

    }

}
于 2013-06-26T15:11:24.717 回答