it-swarm.com.ru

Facebook Android SDK & Java.lang.NullPointerException

У меня проблемы с открытием активной сессии Facebook в моем приложении Android в соответствии с руководством, размещенным по адресу https://developers.facebook.com/docs/Android/getting-started/facebook-sdk -для-Android /

Я боролся с этим в течение достаточно долгого времени без какой-либо удачи! Я буду рад, если один из вас укажет мне правильное направление! ( Бьюсь об заклад, ошибка с некоторыми настройками на моей стороне, но я не могу ее обнаружить )

Вот ошибка, которую я вижу после вызова Session.openActiveSession (это, правда, новый Session.StatusCallback () в onCreate моей деятельности (я в значительной степени следую инструкциям, приведенным в руководствах для разработчиков Facevook)


РЕДАКТИРОВАТЬ: Следующее предупреждающее сообщение регистрируется первым, а затем сообщение об ошибке на следующем снимке экрана

09-03 19: 26: 22.726: W/Bundle (17458): ключ com.facebook.platform.protocol.PROTOCOL_VERSION ожидается строка, но значением является Java.lang.Integer. Возвращено значение по умолчанию. 09-03 19: 26: 22.736: W/Bundle (17458): попытка вызвать сгенерированное внутреннее исключение: 09-03 19: 26: 22.736: W/Bundle (17458): Java.lang.ClassCastException: Java.lang.Integer не может быть приведен к Java.lang.String 09-03 19: 26: 22.736: W/Bundle (17458): на Android.os.Bundle.getString (Bundle .Java: 1061) 09-03 19: 26: 22,736: W/Bundle (17458): на Android.content.Intent.getStringExtra (Intent.Java:4466) 09-03 19: 26: 22,736: W/Bundle (17458 .

enter image description here


09-02 22: 55: 04.110: E/AndroidRuntime (13287): ИСКЛЮЧИТЕЛЬНОЕ ИСКЛЮЧЕНИЕ: главная 09-02 22: 55: 04.110: E/AndroidRuntime (13287): Java.lang.RuntimeException: Невозможно возобновить действие {com.good.amrfbintegration/ com.facebook.LoginActivity }: Java.lang.NullPointerException 09-02 22: 55: 04.110: E/AndroidRuntime (13287): на Android.app.ActivityThread.performResumeActivity (ActivityThread.Java:3036) 09-02 22: 55: 04.110: E/AndroidRuntime (13287): на Android.app.ActivityThread.handleResumeActivity (ActivityThread.Java:3077) 09-02 22: 55: 04.110: E/AndroidRuntime (13287): на Android. app.ActivityThread.handleLaunchActivity (ActivityThread.Java:2373)

enter image description here

Вот что я сделал до сих пор

Обновил приложение на Facebook, указав следующую информацию (я использовал хеш-ключ, сгенерированный с помощью хранилища ключей отладки моей машины)

enter image description here

Вот соответствующая информация из моего файла манифеста (@ string/app_id - это идентификатор приложения с портала Facebook)

enter image description here

Таким образом я добавил ссылку на Facebook SDK в свой проект.

enter image description here

Вот код в моем методе OnCreate основной деятельности

@Override
    protected void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        activity = this;

        Session.openActiveSession(this, true, new Session.StatusCallback() 
        {
            @Override
            public void call(Session session, SessionState state, Exception exception)
            {               
                if (session.isOpened())
                {
                    Toast.makeText(activity, "Connected to Fb", Toast.LENGTH_SHORT).show();
                }
            }});
        }

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

При выполнении Session.openActiveSession logcat отображает ошибку, показанную на моем первом снимке экрана.

Метод вызова Session.StatusCallback () выполняется один раз (в то время как сеанс имеет состояние "открытие"), но в следующий раз происходит сбой приложения. вот что я вижу перед тем, как приложение вылетает

enter image description here

Будем очень благодарны любой помощи!

12
infinity

Эта проблема из-за Facebook SDK, пожалуйста, скачайте и используйте Facebook SDK 3.5.2 с этого URL: - https://developers.facebook.com/docs/Android/

7
Venkat

Да. Проверьте свой код,

Убедитесь, что у вас есть эти вещи на Manifest.xml

<activity Android:name="com.facebook.LoginActivity"/>
<meta-data Android:name="com.facebook.sdk.ApplicationId" Android:value="@string/app_id"/>

И @ string/app_id должен содержать app_id, который вы получаете из деталей конфигурации вашего приложения Facebook. Также там вы должны поставить правильный ключ.

Так что убедитесь -

  1. ваш ключевой хэш верен
  2. Вы правильно настроили приложение в Интернете и позаботились о том, чтобы поместить идентификатор приложения в конфигурацию приложения.
3
AnhSirk Dasarp

Это случилось со мной и сегодня.

Моя проблема была в том, что приложение Facebook было в режиме песочницы. Так что только разработчики и тестеры могут использовать его.

Измените его на странице свойств Facebook Developer вашего приложения: https://developers.facebook.com/apps

Также нашел мой ответ здесь: Не удается получить доступ к сеансу Facebook - UnknownError: Неверное приложение

2
Antilope

Я получал ту же ошибку, Google много вещей, и, наконец, это то, что я сделал, чтобы избежать этой ошибки

  private void getHashKey()
   {
           PackageInfo info;
           try {
           info = getPackageManager().getPackageInfo("Your_Package_Name", PackageManager.GET_SIGNATURES);
           for (Signature signature : info.signatures) {MessageDigest md;
           md = MessageDigest.getInstance("SHA");
           md.update(signature.toByteArray());
                      //String something = new String(Base64.encode(md.digest(), 0));
                        String something = new String(Base64.encode(md.digest(),0));
                      Log.e("** Hash Key", something);
           }
           }
           catch (NameNotFoundException e1) {
           Log.e("name not found", e1.toString());
           }

           catch (NoSuchAlgorithmException e) {
           Log.e("no such an algorithm", e.toString());
           }
           catch (Exception e){
           Log.e("exception", e.toString());
           }

   }

Итак, я использовал Hash_Key, сгенерированный этим кодом, и обновил его в своей консоли разработчика на Facebook. Это решило мою проблему. Вероятно, некоторые проблемы с windows key_gen или Android key_store

А также проверьте файл AuthorizationClient.Java из Facebook Sdk в строке 820.

addLoggingExtra(EVENT_EXTRAS_PROTOCOL_VERSION,"" + 
                    intent.getIntExtra(NativeProtocol.EXTRA_PROTOCOL_VERSION, 0));

Я сделал это в "getIntExtra", где они имели это как "getStringExtra". Внесение этих изменений сработало для меня. Надеюсь, это сработает и для тебя.

0
m0rpheu5

Я немного копался в SDK (3.5), и кажется, что EXTRA_PROTOCOL_VERSION всегда сохраняется как целое число, а не как строка. То есть в NativeProtocol.Java:

 public static Intent createPlatformActivityIntent(Context context, String action, int version, Bundle extras) {
    Intent intent = new Intent()
            .setAction(INTENT_ACTION_PLATFORM_ACTIVITY)
            .setPackage(FACEBOOK_PACKAGE)
            .addCategory(Intent.CATEGORY_DEFAULT)
            .putExtras(extras)
            .putExtra(EXTRA_PROTOCOL_VERSION, version) //version --> int
            .putExtra(EXTRA_PROTOCOL_ACTION, action);
    return validateKatanaActivityIntent(context, intent);
}

public static Intent createPlatformServiceIntent(Context context) {
    Intent intent = new Intent(INTENT_ACTION_PLATFORM_SERVICE)
            .setPackage(FACEBOOK_PACKAGE)
            .addCategory(Intent.CATEGORY_DEFAULT);
    return validateKatanaServiceIntent(context, intent);
}

public static Intent createLoginDialog20121101Intent(Context context, String applicationId, ArrayList<String> permissions,
        String audience) {
    Intent intent = new Intent()
                .setAction(INTENT_ACTION_PLATFORM_ACTIVITY)
                .setPackage(FACEBOOK_PACKAGE)
                .addCategory(Intent.CATEGORY_DEFAULT)
                .putExtra(EXTRA_PROTOCOL_VERSION, PROTOCOL_VERSION_20121101) // PROTOCOL_VERSION_20121101 --> int
                .putExtra(EXTRA_PROTOCOL_ACTION, ACTION_LOGIN_DIALOG)
                .putExtra(EXTRA_APPLICATION_ID, applicationId)
                .putStringArrayListExtra(EXTRA_PERMISSIONS, ensureDefaultPermissions(permissions))
                .putExtra(EXTRA_PROTOCOL_CALL_ID, generateCallId())
                .putExtra(EXTRA_WRITE_PRIVACY, ensureDefaultAudience(audience));
    return validateKatanaActivityIntent(context, intent);
}

И в том месте, где разработчики обычно получают эту ошибку, читается как строка (AuthorizationCLient.Java l: 820):

addLoggingExtra(EVENT_EXTRAS_PROTOCOL_VERSION,
                intent.getStringExtra(NativeProtocol.EXTRA_PROTOCOL_VERSION));

Это не будет работать ни в коем случае, так что это все еще ошибка в SDK. Просто при некоторых обстоятельствах этот сегмент исполняется.

Любые комментарии?

0
sinek
// Just write your code in onResume() rather than onCreate().
@Override
public void onResume() {
    super.onResume();

      if(Session.getActiveSession()==null){
          session = new Session(this);
          Session.setActiveSession(session);
     }
     if (Session.getActiveSession().isOpened())
     {
          Toast.makeText(activity, "Connected to Fb", Toast.LENGTH_SHORT).show();
     }else{
        Session.openActiveSession(this, true, new Session.StatusCallback() 
        {
          @Override
          public void call(Session session, SessionState state, Exception exception)
          {               
            if (session.isOpened())
            {
                Toast.makeText(activity, "Connected to Fb", Toast.LENGTH_SHORT).show();
            }
          }});
       }
   }
}
0
Haresh Chhelana