2015-09-25 150 views
0

我是非常新的Android ..我试图实现Facebook登录,但我面临的错误虽然实施Facebook登录,Android应用程序崩溃

请告诉我什么可以是问题?

MainActivity.Java 

package com.atpata_new; 

import com.facebook.CallbackManager; 
import com.facebook.FacebookCallback; 
import com.facebook.FacebookSdk; 
import com.facebook.login.LoginResult; 
import com.facebook.login.widget.LoginButton; 
import com.facebook.FacebookException; 

import android.app.Activity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.widget.TextView; 

public class MainActivity extends Activity { 

    private TextView info; 
    private LoginButton loginButton; 
    private CallbackManager callbackManager; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     FacebookSdk.sdkInitialize(getApplicationContext()); 
     callbackManager = CallbackManager.Factory.create(); 
     setContentView(R.layout.activity_main); 
     info = (TextView)findViewById(R.id.info); 
     loginButton = (LoginButton)findViewById(R.id.login_button); 
     loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() { 
      @Override 
      public void onSuccess(LoginResult loginResult) { 

       info.setText(
         "User ID: " 
         + loginResult.getAccessToken().getUserId() 
         + "\n" + 
         "Auth Token: " 
         + loginResult.getAccessToken().getToken() 
        ); 

      } 

      @Override 
      public void onCancel() { 
       info.setText("Login attempt canceled."); 

      } 

      @Override 
      public void onError(FacebookException e) { 
       info.setText("Login attempt failed."); 

      } 
     }); 

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

} 

在logcat的我得到以下错误

1月9日至26日:50:00.783:E/AndroidRuntime(28704):致命异常:的AsyncTask#5 1月9日至26日:50:00.783:电子/ AndroidRuntime(28704):进程:com.atpata_new,PID:28704 09-26 01:50:00.783:E/AndroidRuntime(28704):java.lang.NullPointerException 09-26 01:50:00.783:E/AndroidRuntime (28704):在java.util.concurrent.ConcurrentHashMap.containsKey(ConcurrentHashMap.java:911) 09-26 01:50:00.783:E/AndroidRuntime(28704):at com.facebook.internal.Utility.queryAppSettings(Utility .java:822) 09-26 01:50:00.783:E/AndroidRuntime(28704):at com.facebook.login.widget.LoginButton $ 1.run(LoginButton.java:489) 09-26 01:50:00.783:E/AndroidRuntime (28704):在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 09-26 01:50:00.783:E/AndroidRuntime(28704):位于java.util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor.java:587) 1月9日至26日:50:00.783:E/AndroidRuntime(28704):在java.lang.Thread.run(Thread.java:841)

Mainfest.xml

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.atpata_new" 
    android:versionCode="1" 
    android:versionName="1.0" > 

    <uses-sdk 
     android:minSdkVersion="16" 
     android:targetSdkVersion="23"/> 
    <uses-permission android:name="android.permission.INTERNET"/> 

    <application 
     android:allowBackup="true" 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme" > 
     <activity 
      android:name="com.atpata_new.MainActivity"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN"/> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
     <activity android:name="com.facebook.FacebookActivity" 
    android:configChanges= 
     "keyboard|keyboardHidden|screenLayout|screenSize|orientation" 
    android:theme="@android:style/Theme.Translucent.NoTitleBar" 
    android:label="@string/app_name" /> 
    </application> 
    <meta-data android:name="com.facebook.sdk.ApplicationId" 
    android:value="@string/facebook_app_id"/> 
</manifest> 
+0

你应该为你的MainActivity创建一个片段来使这个简单 –

+0

@HtmlTosin:你能告诉我我该怎么做。 –

回答

0

如果您使用的是Android Studio,请使用Fragment创建空白活动。

可以说ExampleFragment,我想你的活动已创建

public class ExampleFragment extends Fragment { 

    LoginButton loginButton; 
    TextView mTextDetails; 
    private AccessTokenTracker mTokenTracker; 
    private ProfileTracker mProfileTracker; 


    private CallbackManager mCallbackManager; 
    private FacebookCallback<LoginResult> mCallback=new FacebookCallback<LoginResult>() { 
     @Override 
     public void onSuccess(LoginResult loginResult) { 
      AccessToken accessToken = loginResult.getAccessToken(); 
      Profile profile = Profile.getCurrentProfile(); 
      Log.d("Fb Login Success ", "In OnSuccess"); 
      if(profile != null){ 
       Log.d("Message: ", "Welcome "+profile.getName()); 
      } 
     } 

     @Override 
     public void onCancel() { 
      Log.d("APP", "onCancel"); 
      Toast.makeText(getActivity(), "login via Facebook cancelled by user ", Toast.LENGTH_LONG).show(); 
     } 

     @Override 
     public void onError(FacebookException e) { 
      Log.d("APP", "onError"); 
      Toast.makeText(getActivity(), "Error Occurred!, Unable to login via Facebook, please try again ", Toast.LENGTH_LONG).show(); 
     } 
    }; 

    //Empty constructor 
    public ExampleFragment() { 
    } 

    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     FacebookSdk.sdkInitialize(getActivity().getApplicationContext()); 
     mCallbackManager=CallbackManager.Factory.create(); 

     setupTokenTracker(); 
     setupProfileTracker(); 

     mTokenTracker.startTracking(); 
     mProfileTracker.startTracking(); 
    } 

    @Override 
    public void onResume() { 
     super.onResume(); 
     Profile profile = Profile.getCurrentProfile(); 
     if(profile != null) { 
      Log.d("Fb Login Success ", "In OnResume"); 
     } 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     // Inflate the layout for this fragment 
     View view=inflater.inflate(R.layout.fragment_login, container, false); 
     return view; 
    } 

    public void onViewCreated(View view,Bundle savedInstanceState){ 
     super.onViewCreated(view,savedInstanceState); 
     loginButton = (LoginButton) view.findViewById(R.id.login_button); 
     loginButton.setFragment(this); 

     //loginButton.setBackgroundResource(R.drawable.facebook); 
     loginButton.setCompoundDrawablesWithIntrinsicBounds(null, null, null, null); 
     loginButton.setCompoundDrawablePadding(0); 
     loginButton.setPadding(20, 20, 20, 20); 
     loginButton.setText(""); 
     loginButton.setWidth(250); 
     loginButton.setHeight(35); 


     //loginButton.setCompoundDrawables(null, null, null, null); 
     loginButton.registerCallback(mCallbackManager, mCallback); 
    } 

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

    @Override 
    public void onStop() { 
     super.onStop(); 
     mTokenTracker.stopTracking(); 
     mProfileTracker.stopTracking(); 
    } 

    private void setupTokenTracker() { 
     mTokenTracker = new AccessTokenTracker() { 
      @Override 
      protected void onCurrentAccessTokenChanged(AccessToken oldAccessToken, AccessToken currentAccessToken) { 
       Log.d("APP currentAccessToken", "" + currentAccessToken); 
      } 
     }; 
    } 

    private void setupProfileTracker() { 
     mProfileTracker = new ProfileTracker() { 
      @Override 
      protected void onCurrentProfileChanged(Profile oldProfile, Profile currentProfile) { 
       if(currentProfile!=null) 
        Log.d("APP currentProfile", "" + currentProfile); 
        Log.d("Fb Login Success ", "In setupProfileTracker"); 
      } 
     }; 
    } 
    //End of file 
} 

您的活动XML布局

   <fragment 
       android:id="@+id/fragment" 
       android:name="com.example.ExampleFragment" 
       tools:layout="@layout/fragment_example" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" /> 

在您的片段XML布局,Fragment_example.xml

<com.facebook.login.widget.LoginButton 
    android:id="@+id/login_button" 
    style="?android:textAppearanceSmall" 
    android:layout_width="250dp" 
    android:layout_height="50dp" 
    android:text="Facebook" 
    android:background="#3b5998" 
    android:textStyle="bold" 
    android:textColor="@android:color/white" 
    android:radius="10dp" 
    /> 
相关问题