2015-05-28 10 views
11

Viene visualizzato questo errore quando si preme "Accedi con Facebook" (pulsante di accesso semplice).Errore: Classe non trovata quando unmarshalling: com.facebook.login.Login Richiesta client

Ho Google e ho letto altri argomenti qui - ma non riesco a vedere nulla che corrisponda al mio problema.

Sto aggiungendo la classe Login.java di seguito.

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

+0

si prega di inviare la piena stack eccezione e altri messaggi di errore che si ottiene –

+0

Fatto. Vedi il primo post – datasmurfen

+0

Anche io ho ricevuto questo errore, con il LoginManager e sembra che nessun altro lo abbia. In qualche modo la classe non viene trovata, ma non so cosa sto facendo in modo diverso. – MechEngineer

risposta

0

Anch'io ho avuto questo problema. La mia è stata tuttavia una chiamata di accesso effettuata all'interno del metodo FBActivity.OnResume per i callback di accesso dopo aver accettato i fb perms.

ho semplicemente spostato la richiesta nel profilo inseguitore nella onCreate metodo

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); 

      } 

     } 
    }; 

Inoltre garantire la tua OnCreate eccellente è la seguente

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

    setContentView(R.layout.activity_fbauth_); 

...

0

Si dovrebbe aggiungere questo Accettazione

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

}

ma se la vostra utilizzando parse SDK aggiungere questo

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

Ho avuto lo stesso problema e risolto mettendo il facebook_app_id-strings.xml invece di una costante:

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

In Nel mio caso ho dimenticato di aggiungere il nome del pacchetto dell'applicazione e il nome della classe sulla pagina degli sviluppatori di Facebook. Dopo aver aggiunto queste informazioni, ha funzionato.

0

ho lottato con questo problema e mi fissa con multidex abilitato

aggiungere questo nel file di configurazione

multiDexEnabled true 

anche questo codice nella vostra attività

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

dopo l'aggiunta di questo le tue dipendenze gradle build

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

Ciò può accadere quando l'utente ha installata l'app nativa di Facebook.

È possibile sopprimere il tentativo di aprirlo inizializzazione s' LoginBehaviour il LoginManager:

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