任何人都知道这个错误意味着什么?每次我将我的Android应用程序连接到Facebook(通过模拟器)时,我都会在LogCat shell中获取它。
负责授权功能的代码:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.authorize);
mPrefs = getPreferences(MODE_PRIVATE);
loginPref = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
String access_token = mPrefs.getString("access_token", null);
long expires = mPrefs.getLong("access_expires", 0);
if(access_token != null) {
Singelton.mFacebook.setAccessToken(access_token);
}
if(expires != 0) {
Singelton.mFacebook.setAccessExpires(expires);
}
Singelton.mFacebook.authorize(this, new String[] {"email","user_birthday"}, new DialogListener() {
@Override
public void onComplete(Bundle values) {
SharedPreferences.Editor editor = mPrefs.edit();
editor.putString("access_token", Singelton.mFacebook.getAccessToken());
editor.putLong("access_expires", Singelton.mFacebook.getAccessExpires());
editor.commit();
SharedPreferences.Editor logEditor = loginPref.edit();
logEditor.putBoolean("login", true);
logEditor.commit();
addUser();
}
@Override
public void onFacebookError(FacebookError error) {
errorHandler();
}
@Override
public void onError(DialogError e) {
errorHandler();
}
@Override
public void onCancel() {
Log.d("MyApp", "Facebook cancel");
}
});
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Singelton.mFacebook.authorizeCallback(requestCode, resultCode, data);
}
答案 0 :(得分:54)
由于以下原因,可能会发生这种情况:
答案 1 :(得分:43)
这只是意味着您没有在手机上安装Facebook应用程序。不要太担心它。
Facebook SDK for Android的工作方式是,无论何时您需要向Facebook发出请求,SDK都会检查您的设备上是否已安装Facebook应用。如果已安装,则通过应用程序发出请求。如果未安装该应用程序,它将自行获取数据。
答案 2 :(得分:4)
如果四个解决方案都没有解决任何人的问题,这可能会有所帮助。当我开始使用Fragments实现Facebook登录时,我得到了同样的错误。我使用的是标准片段而不是支持库v4片段,在切换到支持库片段后,我的问题就消失了。这对我的情况可能是独一无二的,但我认为为了以防万一我会分享它。如果您使用登录按钮方法,也不要忘记设置片段。
chan 1,33,1
phoebe 4,55
答案 3 :(得分:1)
只需将以下权限添加到AndroidManifest.xml
即可<uses-permission android:name="android.permission.SET_DEBUG_APP"/>
答案 4 :(得分:1)
正如@ Vinay-S-Shenoy所说,当Facebook应用未安装在手机或模拟器上时会发生这种情况。我所做的,避免这个错误是在调用facebook.authorize方法之前检查它的Facebook应用程序是否安装,以防万一Facebook应用程序未安装我向用户提醒此消息。
public boolean isFacebookAvailable() {
Intent intent = new Intent(Intent.ACTION_SEND);
intent.putExtra(Intent.EXTRA_TEXT, "Test; please ignore");
intent.setType("text/plain");
final PackageManager pm = this.getApplicationContext().getPackageManager();
for(ResolveInfo resolveInfo: pm.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY)){
ActivityInfo activity = resolveInfo.activityInfo;
// Log.i("actividad ->", activity.name);
if (activity.name.contains("com.facebook.katana")) {
return true;
}
}
return false;
}
答案 5 :(得分:1)
不要忘记覆盖onActivityResult并检查它是否被调用(例如,如果你使用片段)
PS(也许它对其他人有用,我在使用parse facebook登录时遇到了这个麻烦=)
答案 6 :(得分:0)
对我来说(但我使用离子)这是因为在发布之前图片丢失/模板错误:
ionic cordova build android
也许它可以帮助别人......
答案 7 :(得分:-7)
btnFb_photo_post.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// postPhotoToWall(facebook.getAccessToken());
facebook.authorize(MyFBTestActivity.this,
new String[] { "publish_stream" },
new DialogListener() {
@Override
public void onFacebookError(FacebookError e) {
// TODO Auto-generated method stub
Toast.makeText(getApplicationContext(),
e.getMessage(), Toast.LENGTH_LONG).show();
}
@Override
public void onError(DialogError dialogError) {
// TODO Auto-generated method stub
Toast.makeText(getApplicationContext(),
dialogError.getMessage(),
Toast.LENGTH_LONG).show();
}
@Override
public void onComplete(Bundle values) {
postToWall(values.getString(Facebook.TOKEN));
}
private void postToWall(String accessToken) {
// Toast.makeText(getApplicationContext(),
// "trying", Toast.LENGTH_LONG).show();
byte[] data = null;
Bitmap bi = BitmapFactory.decodeResource(
getResources(),
R.drawable.ic_launcher
);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bi.compress(Bitmap.CompressFormat.JPEG, 100, baos);
data = baos.toByteArray();
Bundle params = new Bundle();
// if (facebook.getAccessToken() != null)
params.putString(Facebook.TOKEN,
facebook.getAccessToken()
);
params.putString("method", "photos.upload");
params.putString("caption", "www.samplelink.com");
// params.putString("message",
// "www.google.com");
params.putByteArray("picture", data);
AsyncFacebookRunner mAsyncRunner = new AsyncFacebookRunner(facebook);
mAsyncRunner.request(null, params, "POST",
new SampleUploadListener(), null);
}
@Override
public void onCancel() {
// TODO Auto-generated method stub
}
}
);
}
});
我正在使用此代码将图像上传到FB墙。尝试一次