2016-04-09 9 views
0

Ich versuche, Benutzerdaten nach dem Einloggen (mit Facebook) zu speichern. Ich kann Daten abrufen, kann sie jedoch nicht speichern. Ich verwende SharedPreferences, kann sie aber nicht speichern. Daten gehen nicht verloren, wenn ich eine andere Aktivität mache, aber wenn ich auf die Zurück-Schaltfläche klicke und diese Aktivität erneut öffne, gehen alle Daten verloren. Hier ist mein Code:Verwenden von gemeinsamen Einstellungen mit Einloggen mit Facebook

Profilee.java

public class Profilee extends Fragment { 

    String email1, birthday1, gender1; 
    ImageView imageView; 
    static int itis = 1; 
    TextView texty; 
    LoginButton button; 
    LinearLayout userinput; 
    private CallbackManager callbackManager; 
    private TextView textView; 
    SharedPreferences pref; 
    private TextView email, birthday, gende; 
    private AccessTokenTracker accessTokenTracker; 
    private ProfileTracker profileTracker; 


    private FacebookCallback<LoginResult> callback = new FacebookCallback<LoginResult>() { 
     @Override 
     public void onSuccess(LoginResult loginResult) { 
      AccessToken accessToken = loginResult.getAccessToken(); 
      Profile profile = Profile.getCurrentProfile(); 
      GraphRequest graphrequest = GraphRequest.newMeRequest(loginResult.getAccessToken(), 
        new GraphRequest.GraphJSONObjectCallback() { 

         @Override 
         public void onCompleted(JSONObject object, GraphResponse response) { 
          JSONObject jsonObject = response.getJSONObject(); 
          if (jsonObject != null) { 
           try { 
            email1 = jsonObject.getString("email"); 
            gender1 = jsonObject.getString("gender"); 
            birthday1 = jsonObject.getString("birthday"); 
           } catch (JSONException e) { 
            e.printStackTrace(); 
           } 
          } 
         } 
        }); 
      Bundle parameters = new Bundle(); 
      parameters.putString("fields", "email, gender, birthday"); 
      graphrequest.setParameters(parameters); 
      graphrequest.executeAsync(); 
      AppEventsLogger.activateApp(getContext()); 
     } 

     @Override 
     public void onCancel() { 

     } 

     @Override 
     public void onError(FacebookException e) { 

     } 
    }; 

    public Profilee() { 
     // Required empty public constructor 
    } 


    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     FacebookSdk.sdkInitialize(getActivity().getApplicationContext()); 
     callbackManager = CallbackManager.Factory.create(); 
     Toast.makeText(getContext(), "Create", Toast.LENGTH_SHORT).show(); 
     pref = getContext().getSharedPreferences("", getContext().MODE_PRIVATE); 
     pref.getString("name", "asdfgh"); 
     pref.getString("email", "qwerty"); 
     pref.getString("gender", "zxcvb"); 
     accessTokenTracker = new AccessTokenTracker() { 
      @Override 
      protected void onCurrentAccessTokenChanged(AccessToken oldToken, AccessToken newToken) { 
      } 
     }; 

     profileTracker = new ProfileTracker() { 
      @Override 
      protected void onCurrentProfileChanged(Profile oldProfile, Profile newProfile) { 
      } 
     }; 

     accessTokenTracker.startTracking(); 
     profileTracker.startTracking(); 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     View v = inflater.inflate(R.layout.fragment_profilee, container, false); 
     button = (LoginButton) v.findViewById(R.id.login_button); 
     TextView button12 = (TextView) v.findViewById(R.id.edit); 
     button12.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Intent i = new Intent(getContext(), PrifileEdit.class); 
       i.putExtra("st", email1); 
       startActivity(i); 
      } 
     }); 
     texty = (TextView) v.findViewById(R.id.emo); 
     imageView = (ImageView) v.findViewById(R.id.asd); 
     userinput = (LinearLayout) v.findViewById(R.id.userdetail); 
     int unicode = 0x1F60E; 
     String emoji = getEmijoByUnicode(unicode); 
     String text = "We will never post on your wall without permission "; 
     texty.setText(text + emoji); 

     Toast.makeText(getContext(), "CreateView", Toast.LENGTH_SHORT).show(); 
     return v; 
    } 


    public String getEmijoByUnicode(int unicode) { 
     return new String(Character.toChars(unicode)); 
    } 


    @Override 
    public void onViewCreated(View view, Bundle savedInstanceState) { 
     super.onViewCreated(view, savedInstanceState); 
     LoginButton loginButton = (LoginButton) view.findViewById(R.id.login_button); 
     textView = (TextView) view.findViewById(R.id.textView); 
     email = (TextView) view.findViewById(R.id.emailid); 
     gende = (TextView) view.findViewById(R.id.gender); 
     birthday = (TextView) view.findViewById(R.id.birth); 
     loginButton.setReadPermissions("email"); 
     loginButton.setFragment(this); 
     loginButton.registerCallback(callbackManager, callback); 
     Toast.makeText(getContext(), "ViewCreate", Toast.LENGTH_SHORT).show(); 
    } 

    @Override 
    public void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
     callbackManager.onActivityResult(requestCode, resultCode, data); 
     new Handler().postDelayed(new Runnable() { 
      @Override 
      public void run() { 
       onResume(); 
      } 
     }, 2000); 
    } 

    public void displayMessage(final Profile profile) { 
     if (itis == 1) { 


      if (profile != null) { 
       textView.setText(profile.getName()); 
       email.setText(email1); 
       gende.setText(gender1); 
       birthday.setText(birthday1); 
       button.setVisibility(View.GONE); 
       texty.setVisibility(View.GONE); 
       userinput.setVisibility(View.VISIBLE); 

       pref = getContext().getSharedPreferences("", getContext().MODE_PRIVATE); 
       SharedPreferences.Editor editor = pref.edit(); 
       editor.putString("name", String.valueOf(textView)); 
       editor.putString("email", String.valueOf(email)); 
       editor.putString("gender", String.valueOf(gende)); 
       editor.commit(); 
      } 
     } 
    } 

    @Override 
    public void onStart() { 
     super.onStart(); 
     Toast.makeText(getContext(), "Start", Toast.LENGTH_SHORT).show(); 
    } 


    @Override 
    public void onStop() { 
     super.onStop(); 
     accessTokenTracker.stopTracking(); 
     profileTracker.stopTracking(); 
    } 

    @Override 
    public void onResume() { 
     super.onResume(); 
     Profile profile = Profile.getCurrentProfile(); 
     displayMessage(profile); 
     AppEventsLogger.activateApp(getContext()); 
    } 
} 
+0

Siehe hier schneiden müssen wissen, wie gemeinsam genutzte Einstellungen verwenden im Detail http://coderzpassion.com/android-working-user-sessions/ –

Antwort

0

Ich denke, das Problem wegen displaymessage() ist Methode.

Wenn Sie diese erneut öffnen Aktivität, onResume(); Methode wird aufgerufen, und dann displayMessage().

in displaymessage() Sie setzen sharedprefrecens Werte wieder, und diese Arbeit führen, dass Sie frühere Daten aus diesem sharedprefrecens verloren.

für dieses Problem lösen Sie onResume Codes innerhalb onCreate Methode

+0

tatsächlich OnCreate() wird aufgerufen. Ich dachte auch, onResume() wird aufgerufen, aber dann habe ich Toast verwendet und finde es heraus –

+0

müssen Sie alle Ding Form onResume entfernen, die Ursache neue Werte auf Ihre sharedprefrecens setzen –

0

Sie sind nicht die Daten korrekt in SharedPreferences persistierenden. getText() ruft den Text ab, der derzeit in TextView angezeigt wird, sodass Sie ihn in SharedPreferences speichern können.

editor.putString("name", String.valueOf(textView)); // wrong 
editor.putString("name", textView.getText().toString()); // right 

Anschließend können Sie den Wert abrufen und auf dem Bildschirm angezeigt werden setText() durch den Aufruf.

String myEmail = pref.getString("email", "qwerty"); 
textView.setText(myEmail); 
+0

nichts passierte –

Verwandte Themen