2016-04-09 10 views
0

ログイン後にユーザーの詳細を保存しようとしています(Facebookで)。データを取得できますが、保存できません。私はSharedPreferencesを使用していますが、保存できません。他のアクティビティを実行するとデータが失われることはありませんが、[戻る]ボタンをクリックしてこのアクティビティを再度開くと、すべてのデータが失われます。ここに私のコードは次のとおりです。共有設定を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

内部onResumeコードをカットしなければならない。この問題を解決するためhttp://coderzpassion.com/android-working-user-sessions/ –

答えて

0

私はこの問題が原因のDisplayMessageと()方法だと思います。

これを再度開くと、アクティビティ,onResume();メソッドが呼び出され、displayMessage()が呼び出されます。 DisplayMessageと(中

)あなたはこのsharedprefrecensから以前のデータを失った原因あなたは再びsharedprefrecens値、およびこの作業を設定しています。

ためのあなたが詳細に共有設定を使用する方法を知っているためにここに参照してくださいのonCreateメソッド

+0

実際にonCreate()が呼び出されています。私はまた、onResume()が呼び出されていると思ったが、私はトーストを使用してそれについて調べた –

+0

あなたはあなたのsharedprefrecensに新しい値を設定する原因となるすべてのフォームonResumeを削除する必要があります –

0

あなたは正しくSharedPreferencesでデータを永続化されていません。 getText()は、TextViewに現在表示されているテキストを取得します。これをSharedPreferencesに保存することができます。

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

setText()を呼び出すと、値を取得して画面に表示できます。

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

何も起こらなかった –

関連する問題