it-swarm.com.de

Versuchen Sie, die virtuelle Methode 'int Java.lang.Object.hashCode ()' bei der Facebook-Integration aufzurufen

ich erhalte den followin-Fehler, wenn ich die Facebook-Integration versuche:

11-18 15:57:54.186 23052-23093/com.creaa.admin.mylogin E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #2
11-18 15:57:54.186 23052-23093/com.creaa.admin.mylogin E/AndroidRuntime: Process: com.creaa.admin.mylogin, PID: 23052
11-18 15:57:54.186 23052-23093/com.creaa.admin.mylogin E/AndroidRuntime: Java.lang.NullPointerException: Attempt to invoke virtual method 'int Java.lang.Object.hashCode()' on a null object reference
11-18 15:57:54.186 23052-23093/com.creaa.admin.mylogin E/AndroidRuntime:     at Java.util.concurrent.ConcurrentHashMap.get(ConcurrentHashMap.Java:746)
11-18 15:57:54.186 23052-23093/com.creaa.admin.mylogin E/AndroidRuntime:     at Java.util.concurrent.ConcurrentHashMap.containsKey(ConcurrentHashMap.Java:774)
11-18 15:57:54.186 23052-23093/com.creaa.admin.mylogin E/AndroidRuntime:     at com.facebook.internal.Utility.queryAppSettings(Utility.Java:822)
11-18 15:57:54.186 23052-23093/com.creaa.admin.mylogin E/AndroidRuntime:     at com.facebook.login.widget.LoginButton$1.run(LoginButton.Java:489)
11-18 15:57:54.186 23052-23093/com.creaa.admin.mylogin E/AndroidRuntime:     at Java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.Java:1112)
11-18 15:57:54.186 23052-23093/com.creaa.admin.mylogin E/AndroidRuntime:     at Java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.Java:587)
11-18 15:57:54.186 23052-23093/com.creaa.admin.mylogin E/AndroidRuntime:     at Java.lang.Thread.run(Thread.Java:818)

unten ist meine Haupttätigkeit:

public class MainActivity extends Activity {

    private static String APP_ID = "1500167156975715"; // Replace your App ID here
    CallbackManager callbackManager;
    ArrayList<String> permissions;
    Context cv = this;
    boolean loginflag = false;
    private ProfileTracker profiletracker;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //initilise fb sdk
        FacebookSdk.sdkInitialize(getApplicationContext());
        //logout any previous logins
        AccessToken accessToken = AccessToken.getCurrentAccessToken();
        accessToken.setCurrentAccessToken(null);
        Profile.getCurrentProfile().setCurrentProfile(null);
        LoginManager.getInstance().logOut();
        setContentView(R.layout.activity_main);
        permissions = new ArrayList<String>();
        permissions.add("email");
        permissions.add("user_likes");
        permissions.add("user_friends");
        permissions.add("public_profile");
        permissions.add("user_birthday");


        try {
            PackageInfo info = getPackageManager().getPackageInfo(
                    "com.example.facebooklogin",
                    PackageManager.GET_SIGNATURES);
            for (Signature signature : info.signatures) {
                MessageDigest md = MessageDigest.getInstance("SHA");
                md.update(signature.toByteArray());
                Log.d("Parth", "KeyHash : " + Base64.encodeToString(md.digest(), Base64.DEFAULT));
            }
        } catch (NameNotFoundException e) {

        } catch (NoSuchAlgorithmException e) {

        }
        callbackManager = CallbackManager.Factory.create();
        LoginButton loginbutton = (LoginButton) findViewById(R.id.login_button);
        loginbutton.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                if (AccessToken.getCurrentAccessToken() != null && Profile.getCurrentProfile() != null) {
                    if (loginflag) {
                        AccessToken accessToken = AccessToken.getCurrentAccessToken();
                        accessToken.setCurrentAccessToken(null);
                        Profile.getCurrentProfile().setCurrentProfile(null);
                        Toast.makeText(cv, "Logout", Toast.LENGTH_SHORT).show();
                        LoginManager.getInstance().logOut();
                    }
                } else {
                    if (!loginflag) {
                        Toast.makeText(cv, "Login", Toast.LENGTH_SHORT).show();
                        LoginManager.getInstance().logInWithReadPermissions(MainActivity.this, permissions);
                    }
                }
            }
        });
        loginbutton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {

            @Override
            public void onSuccess(LoginResult result) {
                // TODO Auto-generated method stub
                Toast.makeText(cv, "in onSucess", Toast.LENGTH_SHORT).show();
                //get account details
                GraphRequest request = GraphRequest.newMeRequest(result.getAccessToken(), new GraphJSONObjectCallback() {

                    @Override
                    public void onCompleted(JSONObject object, GraphResponse response) {
                        // TODO Auto-generated method stub
                        Log.d("Parth", response.toString() + "\njson" + object.toString());
                        try {
                            String email = (String) object.get("email");
                            Toast.makeText(cv, email, Toast.LENGTH_SHORT).show();
                        } catch (JSONException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        }

                    }
                });
                Bundle parameters = new Bundle();
                parameters.putString("fields", "id,name,email,gender,birthday");
                request.setParameters(parameters);
                request.executeAsync();
            }

            @Override
            public void onError(FacebookException error) {
                // TODO Auto-generated method stub
                Toast.makeText(cv, "in onError", Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onCancel() {
                // TODO Auto-generated method stub
                Toast.makeText(cv, "in oncancel", Toast.LENGTH_SHORT).show();
            }
        });
        profiletracker = new ProfileTracker() {

            @Override
            protected void onCurrentProfileChanged(Profile oldProfile, Profile currentProfile) {
                // TODO Auto-generated method stub
                if (currentProfile != null) {
                    Toast.makeText(cv, "in Currentprofilechanged", Toast.LENGTH_SHORT).show();
                    String name = currentProfile.getName();
                    String fname = currentProfile.getFirstName();
                    Toast.makeText(MainActivity.this, fname, Toast.LENGTH_SHORT).show();
                }
            }
        };
    }
}

unten ist die app gradle:

apply plugin: 'com.Android.application'

Android {
    compileSdkVersion 23
    buildToolsVersion "23.0.2"

    defaultConfig {
        applicationId "com.creaa.admin.mylogin"
        minSdkVersion 15
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-Android.txt'), 'proguard-rules.pro'
        }
    }
}
repositories { mavenCentral() }
dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.Android.support:appcompat-v7:23.1.1'
    compile 'com.facebook.Android:facebook-Android-sdk:4.6.0'
}

unten ist die Manifestdatei: 

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:Android="http://schemas.Android.com/apk/res/Android"
    package="com.creaa.admin.mylogin" >
<uses-permission Android:name="Android.permission.INTERNET"/>
    <application
        Android:allowBackup="true"
        Android:icon="@mipmap/ic_launcher"
        Android:label="@string/app_name"
        Android:supportsRtl="true"
        Android:theme="@style/AppTheme" >
        <activity Android:name=".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:label="@string/app_name"
            Android:theme="@Android:style/Theme.Translucent.NoTitleBar" />
        <meta-data Android:name="com.facebook.sdk.ApplicationId" Android:value="1500167156975715"/>
        <provider
            Android:name="com.facebook.FacebookContentProvider"
            Android:authorities="com.facebook.app.FacebookContentProvider233936543368280"
            Android:exported="true" />
    </application>

</manifest>

ich habe alle möglichen Dinge ausprobiert, aber ich kann den Fehler nicht herausfinden. Es wäre sehr nett, wenn mir jemand bei diesem Problem helfen könnte. Ich habe gerade von Eclipse zu Android Studio gewechselt. Dieser Code hat in Eclipse gut funktioniert, funktioniert aber nicht in Android Studio.

12
Parth Anjaria

ich habe dieses Problem nach so viel Forschung und Entwicklung gelöst. Was Sie tun müssen, ist Facebook APPID in string.xml zu definieren und diese Zeichenfolge in Metadaten im Manifest unter application tag zu verwenden.

string.xml

<string name="facebook_app_id">XXXXXX</string>

manifest.xml

 <meta-data
            Android:name="com.facebook.sdk.ApplicationId"
            Android:value="@string/facebook_app_id"/>
22
Deep Dave

Ich fand das Problem schließlich heraus und kam zu dem Fix. Das Problem bestand darin, dass die Anmeldungsschaltfläche die Anwendungs-App-ID nicht finden konnte. Sie müssen lediglich das Meta-Tag der Anwendungs-ID in das Anwendungs-Tag-Element einfügen. Das ist alles

4
Izuchukwu Oleka

Wenn Sie dies in einem Fragment implementieren, führen Sie Folgendes aus:

loginbutton.setfragment(this)

Hoffe das hilft.

0
mossman252

Prüfen Sie im Login-Manager Callback, ob ein Fehler vorliegt. Falls ja. handhaben.

Für jede Berechtigung wird die Rückruffunktion aufgerufen. Prüfen Sie, welche Berechtigungen der Benutzer genehmigt hat, und verarbeiten Sie die Informationen entsprechend.

0
TheAndroidFreak