簡體   English   中英

添加Facebook登錄名時應用崩潰

[英]App crashes when adding Facebook login

在我添加Facebook登錄名之前,我的應用程序運行良好。 我所做的一切與在其他應用程序上所做的相同,但仍然會出錯。 我添加了Facebook SDK,並對其進行了初始化。 我在Facebook網站上注冊了我的應用程序。 還是不明白問題所在。

 01-02 23:05:02.192: E/AndroidRuntime(30078): Process: com.sam.sports, PID: 30078 01-02 23:05:02.192: E/AndroidRuntime(30078): java.lang.NoClassDefFoundError: com.facebook.FacebookActivity 01-02 23:05:02.192: E/AndroidRuntime(30078): at com.facebook.internal.Validate.hasFacebookActivity(Validate.java:176) 01-02 23:05:02.192: E/AndroidRuntime(30078): at com.facebook.FacebookSdk.sdkInitialize(FacebookSdk.java:198) 01-02 23:05:02.192: E/AndroidRuntime(30078): at com.facebook.FacebookSdk.sdkInitialize(FacebookSdk.java:174) 01-02 23:05:02.192: E/AndroidRuntime(30078): at com.sam.sports.LoginActivity.onCreate(LoginActivity.java:59) 01-02 23:05:02.192: E/AndroidRuntime(30078): at android.app.Activity.performCreate(Activity.java:5280) 01-02 23:05:02.192: E/AndroidRuntime(30078): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1088) 01-02 23:05:02.192: E/AndroidRuntime(30078): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2322) 01-02 23:05:02.192: E/AndroidRuntime(30078): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2410) 01-02 23:05:02.192: E/AndroidRuntime(30078): at android.app.ActivityThread.access$800(ActivityThread.java:155) 01-02 23:05:02.192: E/AndroidRuntime(30078): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1331) 01-02 23:05:02.192: E/AndroidRuntime(30078): at android.os.Handler.dispatchMessage(Handler.java:110) 01-02 23:05:02.192: E/AndroidRuntime(30078): at android.os.Looper.loop(Looper.java:193) 01-02 23:05:02.192: E/AndroidRuntime(30078): at android.app.ActivityThread.main(ActivityThread.java:5388) 01-02 23:05:02.192: E/AndroidRuntime(30078): at java.lang.reflect.Method.invokeNative(Native Method) 01-02 23:05:02.192: E/AndroidRuntime(30078): at java.lang.reflect.Method.invoke(Method.java:515) 01-02 23:05:02.192: E/AndroidRuntime(30078): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 01-02 23:05:02.192: E/AndroidRuntime(30078): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:655) 01-02 23:05:02.192: E/AndroidRuntime(30078): at dalvik.system.NativeStart.main(Native Method) 
 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.sam.sports" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="18" android:targetSdkVersion="23" /> <uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.CAMERA" /> <uses-feature android:name="android.hardware.camera" /> <uses-feature android:name="android.hardware.camera.autofocus" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <application android:name="com.sam.sports.app.AppController" android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/MyTheme" > <meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/facebook_app_id"/> <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" /> <provider android:authorities="com.facebook.app.FacebookContentProvider975617842510005" android:name="com.facebook.FacebookContentProvider" android:exported="true"/> <activity android:name=".LoginActivity" android:label="@string/app_name" android:launchMode="singleTop" android:windowSoftInputMode="adjustPan" > <intent-filter > <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".RegisterActivity" android:label="@string/app_name" android:launchMode="singleTop" android:windowSoftInputMode="adjustPan" /> <activity android:name=".MainActivity" android:label="@string/app_name" android:launchMode="singleTop" /> <activity android:name=".CreateLog" android:label="@string/app_name" android:launchMode="singleTop" /> </application> </manifest> 
 public class LoginActivity extends Activity { private static final String TAG = RegisterActivity.class.getSimpleName(); private Button btnLogin; private Button btnLinkToRegister; private EditText inputEmail; private EditText inputPassword; private ProgressDialog pDialog; private SessionManager session; private SQLiteHandler db; public static final String PREFS_NAME = "MyApp_Settings"; CallbackManager callbackManager; LoginButton login; String name; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); FacebookSdk.sdkInitialize(getApplicationContext()); setContentView(R.layout.activity_login); inputEmail = (EditText) findViewById(R.id.email_login); inputPassword = (EditText) findViewById(R.id.pass_login); btnLogin = (Button) findViewById(R.id.login); btnLinkToRegister = (Button) findViewById(R.id.btnLinkToRegisterScreen); ///////////////////////////////////////////////// Facebook Login Starts /////////////////////////////////////////////////////////////////////// callbackManager = CallbackManager.Factory.create(); login = (LoginButton)findViewById(R.id.login_button); login.setReadPermissions("public_profile email"); if(AccessToken.getCurrentAccessToken() != null){ RequestData(); } login.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if(AccessToken.getCurrentAccessToken() != null) { } } }); login.registerCallback(callbackManager, new FacebookCallback<LoginResult>() { @Override public void onSuccess(LoginResult loginResult) { if(AccessToken.getCurrentAccessToken() != null){ RequestData(); } } @Override public void onCancel() { } @Override public void onError(FacebookException exception) { } }); /////////////////////////////////////////////////////////Facebook Login Ends///////////////////////////////////////////////////////////////// // Progress dialog pDialog = new ProgressDialog(this); pDialog.setCancelable(false); // SQLite database handler db = new SQLiteHandler(getApplicationContext()); // Session manager session = new SessionManager(getApplicationContext()); // Check if user is already logged in or not if (session.isLoggedIn()) { // User is already logged in. Take him to main activity Intent intent = new Intent(LoginActivity.this, MainActivity.class); startActivity(intent); finish(); } // Login button Click Event btnLogin.setOnClickListener(new View.OnClickListener() { public void onClick(View view) { String email = inputEmail.getText().toString().trim(); String password = inputPassword.getText().toString().trim(); // Check for empty data in the form if (!email.isEmpty() && !password.isEmpty()) { // login user checkLogin(email, password); } else { // Prompt user to enter credentials Toast.makeText(getApplicationContext(), "Please enter the credentials!", Toast.LENGTH_LONG).show(); } } }); // Link to Register Screen btnLinkToRegister.setOnClickListener(new View.OnClickListener() { public void onClick(View view) { Intent i = new Intent(getApplicationContext(), RegisterActivity.class); startActivity(i); finish(); } }); } /** * function to verify login details in mysql db * */ private void checkLogin(final String email, final String password) { // Tag used to cancel the request String tag_string_req = "req_login"; pDialog.setMessage("Logging in ..."); showDialog(); StringRequest strReq = new StringRequest(Method.POST, AppConfig.URL_LOGIN, new Response.Listener<String>() { @Override public void onResponse(String response) { Log.d(TAG, "Login Response: " + response.toString()); hideDialog(); try { JSONObject jObj = new JSONObject(response); boolean error = jObj.getBoolean("error"); // Check for error node in json if (!error) { // user successfully logged in // Create login session session.setLogin(true); // Now store the user in SQLite String uid = jObj.getString("uid"); JSONObject user = jObj.getJSONObject("user"); String name = user.getString("name"); String email = user.getString("email"); String created_at = user .getString("created_at"); // Inserting row in users table db.addUser(name, email, uid, created_at); //add "option" to SharedPreference SharedPreferences settings = getSharedPreferences(PREFS_NAME, MODE_PRIVATE); Editor editor = settings.edit(); editor.putString("option", "0"); editor.commit(); // Launch main activity Intent intent = new Intent(LoginActivity.this, MainActivity.class); startActivity(intent); finish(); } else { // Error in login. Get the error message String errorMsg = jObj.getString("error_msg"); Toast.makeText(getApplicationContext(), errorMsg, Toast.LENGTH_LONG).show(); } } catch (JSONException e) { // JSON error e.printStackTrace(); Toast.makeText(getApplicationContext(), "Json error: " + e.getMessage(), Toast.LENGTH_LONG).show(); } } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { Log.e(TAG, "Login Error: " + error.getMessage()); Toast.makeText(getApplicationContext(), error.getMessage(), Toast.LENGTH_LONG).show(); hideDialog(); } }) { @Override protected Map<String, String> getParams() { // Posting parameters to login url Map<String, String> params = new HashMap<String, String>(); params.put("email", email); params.put("password", password); return params; } }; // Adding request to request queue AppController.getInstance().addToRequestQueue(strReq, tag_string_req); } private void showDialog() { if (!pDialog.isShowing()) pDialog.show(); } private void hideDialog() { if (pDialog.isShowing()) pDialog.dismiss(); } //////////////////////////////////////////////////////////Facebook Login Starts/////////////////////////////////////////////////////////////////// public void RequestData(){ GraphRequest request = GraphRequest.newMeRequest(AccessToken.getCurrentAccessToken(), new GraphRequest.GraphJSONObjectCallback() { @Override public void onCompleted(JSONObject object, GraphResponse response) { // TODO Auto-generated method stub JSONObject json = response.getJSONObject(); try { if(json != null){ //String text = "<b>Name :</b> "+json.getString("name")+"<br><br><b>Email :</b> "+json.getString("email")+"<br><br><b>Profile link :</b> "+json.getString("link"); name = json.getString("name"); SharedPreferences settings = getSharedPreferences(PREFS_NAME, MODE_PRIVATE); Editor editor = settings.edit(); editor.putString("option", "1"); editor.putString("name", name); editor.commit(); Intent main = new Intent(LoginActivity.this, MainActivity.class); startActivity(main); finish(); } } catch (JSONException e) { e.printStackTrace(); } } }); Bundle parameters = new Bundle(); parameters.putString("fields", "id,name,link,email,picture"); request.setParameters(parameters); request.executeAsync(); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); callbackManager.onActivityResult(requestCode, resultCode, data); } //////////////////////////////////////////////////////////////Facebook Login Ends/////////////////////////////////////////////////////////////// } 

Facebook權限應分開:

login.setReadPermissions("public_profile","email");

並且不需要:
login.setOnClickListener(new View.OnClickListener()
因為在單擊login按鈕時它將調用:
login.registerCallback(callbackManager, new FacebookCallback<LoginResult>()方法來調用com.facebook.FacebookActivity

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM