Ich verwende Facebook GraphRequest, um Benutzerdetails abzurufen und diese Details dann in Firebase und lokal in sharedPreferences zu speichern. Dies ist das Stück Code: -GraphRequest, executeAsync, Android: Warum gibt es eine NullPointerException?
public class Login extends AppCompatActivity {
Profile userProfile; /* Profile is a user-created class */
@Override
protected void onCreate(Bundle savedInstanceState) {
facebookLoginButton.registerCallback(facebookCallbackManager, new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
GraphRequest request = GraphRequest.newMeRequest(
loginResult.getAccessToken(),
new GraphRequest.GraphJSONObjectCallback() {
@Override
public void onCompleted(JSONObject object, GraphResponse response) {
String fullName,email;
try {
fullName=object.getString("name");
email = object.getString("email");
/* Initializing userProfile */
userProfile=new Profile(fullName,email);
firebaseReference.setValue(userProfile); //This works, which means userProfile is NOT null here
} catch (JSONException e) {
Log.d("JSONerror",e.toString());
}
}
});
Bundle parameters = new Bundle();
parameters.putString("fields", "id,name,email");
request.setParameters(parameters);
request.executeAsync();
saveProfileInfoLocally();
}
@Override
public void onCancel() {}
@Override
public void onError(FacebookException error) {}
});
void saveProfileInfoLocally(){
SharedPreferences sharedPrefs = getSharedPreferences("UserInfo", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPrefs.edit();
editor.putString("fullName",userProfile.getFullName()); //BUT this does NOT work, says userProfile is null
editor.apply();
}}
aber wenn ich versuche, die Userprofile Details in saveProfileInfoLocally zuzugreifen(), eine Nullpointer wirft und sagte: „Versuch virtuelle Methode auf ein Null-Objekt Verweis aufrufen“. Bitte sagen Sie mir, was falsch ist und am besten, um es zu erledigen. Vielen Dank.
Vielen Dank für die Antwort, aber was ich nicht verstehe, ist - Warum es sagt das „Userprofile“ ist null, auch obwohl ich es initialisiert habe? – rdx
Weil Sie es nicht initialisiert haben :) Der Code, der das Profil initialisierte, war INSIDE der Rückruf. Und ein Callback definiert etwas, das asynchron passiert. Das bedeutet, dass es jetzt oder in 10 Minuten von jetzt an passieren kann. Aber Sie haben die saveProfileInfoLocally() - Methode außerhalb des Callbacks aufgerufen. Ihr Code hat also versucht, das Profilobjekt zu speichern, ohne zu wissen, ob der GraphJSONObjectCallback abgeschlossen wurde. Offensichtlich war der Rückruf nicht abgeschlossen und das Profil war null :) – Cbr
Ich dachte dies als Grund, aber ich bin verwirrt, da diese Zeile - fireBaseReference.setValue (userProfile) - legt den Wert und Firebase zeigt den Benutzer Daten in seiner Datenbank. Das bedeutet, dass das userProfile erstellt wurde und es nicht null ist. Hab ich recht? – rdx