Android中的Facebook授权问题

时间:2012-01-10 10:28:25

标签: android facebook

我正在尝试将facebook与Android手机集成,我需要做的就是从我的应用程序中获取一些文本并将其作为状态在Facebook上,我已经尝试了facebook_sdk用于此目的,当我看到调试模式时,应用程序终止在facebook.authorize()行,虽然在清单中有完整的互联网连接......下面是我的代码: 提前致谢

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    button1 = (Button)findViewById(R.id.Button1);
    button2 = (Button)findViewById(R.id.Button2);
    tv1 = (TextView)findViewById(R.id.TextView1);
    et1 = (EditText)findViewById(R.id.EditText1);
    button1.setOnClickListener(new OnClickListener(){
        @Override
        public void onClick(View v) {
            b1Click();
        }

    });
    button2.setOnClickListener(new OnClickListener(){
        @Override
        public void onClick(View v) {
            b2Click();
        }

    });
}
private void saveFBToken(String token, long tokenExpires){
    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
    prefs.edit().putString("FacebookToken", token).commit();
}

private void fbAuthAndPost(final String message){

    facebook.authorize(this, new String[]{"publish_stream"},new   DialogListener() {

        @Override
        public void onComplete(Bundle values) {
            Log.d(this.getClass().getName(),"Facebook.authorize Complete: ");
            saveFBToken(facebook.getAccessToken(), facebook.getAccessExpires());
            updateStatus(values.getString(Facebook.TOKEN), message);
        }

        @Override
        public void onFacebookError(FacebookError error) {
            Log.d(this.getClass().getName(),"Facebook.authorize Error: "+error.toString());
        }

        @Override
        public void onError(DialogError e) {
            Log.d(this.getClass().getName(),"Facebook.authorize DialogError: "+e.toString());
        }

        @Override
        public void onCancel() {
            Log.d(this.getClass().getName(),"Facebook authorization canceled");
        }
    });
}

@Override
protected void onActivityResult(int requestCode, int resultCode,Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    switch (requestCode){
    case Facebook.FORCE_DIALOG_AUTH:
        facebook.authorizeCallback(requestCode, resultCode, data);
    }
}

private void b1Click(){

    mAuthAttempts = 0;

    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
    mFacebookToken = prefs.getString("FacebookToken", "");

    if(mFacebookToken.equals("")){
        fbAuthAndPost(et1.getText().toString());
    }else{
        updateStatus(mFacebookToken,et1.getText().toString());
    }
}

private void b2Click(){
    mAuthAttempts = 0;
    updateStatus(facebook.TOKEN,et1.getText().toString());
}

public void updateStatus(String accessToken, String message){
    try {         
        Bundle bundle = new Bundle();
        bundle.putString("message", message);         
        bundle.putString(Facebook.TOKEN,accessToken);         
        String response = facebook.request("me/feed",bundle,"POST");         
        Log.d("UPDATE RESPONSE",""+response);
        showToast("Update process complete. Respose:"+response);
        if(response.indexOf("OAuthException") > -1){
            if(mAuthAttempts==0){
                mAuthAttempts++;
                fbAuthAndPost(message);
            }else{
                showToast("OAuthException:");
            }
        }
    } catch (MalformedURLException e) {         
        Log.e("MALFORMED URL",""+e.getMessage());
        showToast("MalformedURLException:"+e.getMessage());
    } catch (IOException e) {         
        Log.e("IOEX",""+e.getMessage());
        showToast("IOException:"+e.getMessage());
    }

    String s = facebook.getAccessToken()+"\n";
    s += String.valueOf(facebook.getAccessExpires())+"\n";
    s += "Now:"+String.valueOf(System.currentTimeMillis())+"\n";
    tv1.setText(s);
} 
private void showToast(String message){
    Toast.makeText(getApplicationContext(), message, Toast.LENGTH_LONG).show();
}

2 个答案:

答案 0 :(得分:0)

我很欣赏你在应用程序崩溃之前收到的错误的一些细节。就像Usama所说的logcat会很棒。我看不到你在哪里初始化变量facebook = new Facebook(APP_ID);.确保您还拥有facebook在清单中使用的所有活动。最后我告诉你: https://github.com/facebook/facebook-android-sdk/blob/master/examples/simple/src/com/facebook/android/Example.java

我希望其中一些有用。

<<当您尝试登录Facebook页面时,如果用户和密码正确,则会收到令牌,这意味着该应用程序有一个有效用户登录到Facebook服务器。 SessionStore类将该令牌保存在共享首选项中。因此,您可以稍后使用令牌再次连接到Facebook,而无需向用户询问密码。只有在会话未过期时才能执行此操作。 关于错误: “当找不到请求的资源时,资源API会抛出此异常。”

我很久以前就进行了facebook集成,对于一家公司,所以我无法通过你的代码因为我没有它。看看这篇文章也许有帮助。 http://www.jiahaoliuliu.com/2011/05/android-runtime-error.html

我会四处看看是否能找到更明确的内容。

答案 1 :(得分:0)

android.content.res.Resources$NotFoundException

有时被解雇'因为在导入项目时你可能会覆盖英文字符串资源。