Подтвердить что ты не робот

Ошибка: класс не найден при разборке: com.facebook.login.Login Запрос клиента

Я получаю эту ошибку, когда нажимаю кнопку "Войти в Facebook" (простая кнопка входа в систему).

У меня есть Google и читаю другие темы здесь, но я не вижу ничего, что соответствовало бы моей проблеме.

Я добавляю следующий класс Login.java.

public class Login extends Activity {



/**
 * Called when the activity is first created.
 */

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    FacebookSdk.sdkInitialize(getApplicationContext());
    setContentView(R.layout.activity_login);
    CallbackManager callbackManager = CallbackManager.Factory.create();
    LoginButton loginButton = (LoginButton) findViewById(R.id.login_button);
    loginButton.setReadPermissions("public_profile", "email", "user_friends");

    // Other app specific specialization

    loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {


        @Override
        public void onSuccess(LoginResult loginResult) {

            Log.i("Login", "Logged in: ");
          Intent i = new Intent(Login.this, MainActivity.class);
            startActivity(i);
        }

        @Override
        public void onCancel() {
            // App code

        }

        @Override
        public void onError(FacebookException exception) {
            // App code
            Log.i("Error" , "Error");
        }


    });
}
}

StackTrace:

            05-28 20:07:27.550     872-1363/? E/Parcel﹕ Class not found when unmarshalling: com.facebook.login.LoginClient$Request
            java.lang.ClassNotFoundException: com.facebook.login.LoginClient$Request
            at java.lang.Class.classForName(Native Method)
            at java.lang.Class.forName(Class.java:308)
            at java.lang.Class.forName(Class.java:272)
            at android.os.Parcel.readParcelableCreator(Parcel.java:2275)
            at android.os.Parcel.readParcelable(Parcel.java:2239)
            at android.os.Parcel.readValue(Parcel.java:2146)
            at android.os.Parcel.readArrayMapInternal(Parcel.java:2479)
            at android.os.BaseBundle.unparcel(BaseBundle.java:221)
            at android.os.BaseBundle.getString(BaseBundle.java:918)
            at android.content.Intent.getStringExtra(Intent.java:5378)
            at com.android.server.am.ActivityStackSupervisor.startActivityLocked(ActivityStackSupervisor.java:1768)
            at com.android.server.am.ActivityStackSupervisor.startActivityMayWait(ActivityStackSupervisor.java:1313)
            at com.android.server.am.ActivityManagerService.startActivityAsUser(ActivityManagerService.java:4522)
            at com.android.server.am.ActivityManagerService.startActivity(ActivityManagerService.java:4368)
            at android.app.ActivityManagerNative.onTransact(ActivityManagerNative.java:140)
            at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:2964)
            at android.os.Binder.execTransact(Binder.java:446)
             Caused by: java.lang.ClassNotFoundException: Didn't find class "com.facebook.login.LoginClient$Request" on path: DexPathList[[directory "."],nativeLibraryDirectories=[/vendor/lib, /system/lib]]
            at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
            at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
            at java.lang.ClassLoader.loadClass(ClassLoader.java:469)
            at java.lang.Class.classForName(Native Method)
            at java.lang.Class.forName(Class.java:308)
            at java.lang.Class.forName(Class.java:272)
            at android.os.Parcel.readParcelableCreator(Parcel.java:2275)
            at android.os.Parcel.readParcelable(Parcel.java:2239)
            at android.os.Parcel.readValue(Parcel.java:2146)
            at android.os.Parcel.readArrayMapInternal(Parcel.java:2479)
            at android.os.BaseBundle.unparcel(BaseBundle.java:221)
            at android.os.BaseBundle.getString(BaseBundle.java:918)
            at android.content.Intent.getStringExtra(Intent.java:5378)
            at com.android.server.am.ActivityStackSupervisor.startActivityLocked(ActivityStackSupervisor.j

           Java:1768)      at com.android.server.am.ActivityStackSupervisor.startActivityMayWait(ActivityStackSupervisor.java:1313)
          at com.android.server.am.ActivityManagerService.startActivityAsUser(ActivityManagerService.java:4522)
            at com.android.server.am.ActivityManagerService.startActivity(ActivityManagerService.java:4368)
            at android.app.ActivityManagerNative.onTransact(ActivityManagerNative.java:140)
            at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:2964)
            at android.os.Binder.execTransact(Binder.java:446)
             Suppressed: java.lang.ClassNotFoundException: com.facebook.login.LoginClient$Request
            at java.lang.Class.classForName(Native Method)
            at java.lang.BootClassLoader.findClass(ClassLoader.java:781)
            at java.lang.BootClassLoader.loadClass(ClassLoader.java:841)
            at java.lang.ClassLoader.loadClass(ClassLoader.java:504)
            ... 18 more
           Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack available
4b9b3361

Ответ 2

Это может произойти, если у пользователя установлено собственное приложение Facebook.

Вы можете подавить попытку открыть его, инициализируя LoginManager LoginBehaviour:

 // Don't allow the Facebook App to open.
 LoginManager.getInstance().setLoginBehavior(LoginBehavior.WEB_VIEW_ONLY);

Ответ 3

У меня тоже была эта проблема. Mine, однако, был логином, сделанным в рамках метода FBActivity.OnResume для обратных вызовов для входа в систему после принятия fb perms.

Я просто переместил запрос в трекер профиля в методе onCreate

    ProfileTracker profileTracker = new ProfileTracker() {
        @Override
        protected void onCurrentProfileChanged(Profile oldProfile, Profile currentProfile) {

            Profile.fetchProfileForCurrentAccessToken();
            if(currentProfile != null) {
                String fbUserId = currentProfile.getId();
                profileUrl = currentProfile.getProfilePictureUri(200, 200).toString();
                Log.d("FB profile", "got new/updated profile from thread " + fbUserId);

                // jump if logged in already
                GetFacebookProfileAndJump(currentProfile);

            }

        }
    };

Также убедитесь, что ваш onCreate super выглядит следующим образом

    FacebookSdk.sdkInitialize(getApplicationContext());
    mCallbackmanager = CallbackManager.Factory.create();
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_fbauth_);

...

Ответ 4

Вы должны добавить это к своей acctivity

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

}

но если вы используете синтаксический анализ SDK, добавьте этот

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

Ответ 5

У меня была та же проблема и решена, поставив facebook_app_id в strings.xml вместо константы:

<meta-data
        android:name="com.facebook.sdk.ApplicationId"
        android:value="@string/facebook_app_id" />

Ответ 6

В моем случае я забыл добавить имя пакета приложения и имя класса на странице разработчика facebook. После того, как я добавил эту информацию, она сработала.

Ответ 7

Я боролся с этой проблемой, и я исправил с поддержкой multidex

добавьте это в свой файл сборки

multiDexEnabled true

также этот код в вашей деятельности

@Override   
protected void attachBaseContext(Context context) {
         super.attachBaseContext(context);
         MultiDex.install(this);
}

после добавления в зависимостях сборки gradle

compile 'com.android.support:multidex:1.0.1'