我正在尝试将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();
}
答案 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
有时被解雇'因为在导入项目时你可能会覆盖英文字符串资源。