Search code examples
androidandroid-fragmentssharedpreferencesstorageandroid-preferences

Data not saved in shared preferences on Commit


I am trying to save the data received by the fragment into a shared preference so that I can reuse the data stored in shared preference when the same fragment is recreated. But somehow the data is not getting saved and the default value of preference is returned to my fragment. Below is the code. Fragment implementing SharePreference

import android.content.Context;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import android.widget.Toast;

public class StreamFragment extends Fragment {

    public String streamUrl=null;
    TextView textView;
    public static final String playerData="pData";
    SharedPreferences playerSettings;
    public StreamFragment(){};

   @Override
    public void onCreate(Bundle state) {
        super.onCreate(state);
        SharedPreferences playerSettings = getActivity().getSharedPreferences(playerData, Context.MODE_PRIVATE);
        streamUrl = playerSettings.getString(streamUrl,"No Link Found");
    }

    @Override
    public View onCreateView( LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
        View view =  inflater.inflate(R.layout.fragment_stream, container, false);
        playerSettings = getActivity().getSharedPreferences(playerData, Context.MODE_PRIVATE);
        streamUrl = playerSettings.getString("streamLink","No Link Found");
        //getData();
        Toast.makeText(getActivity(),"Stream Saved"+streamUrl,Toast.LENGTH_LONG).show();
        return view;
    }       

    public void getUrl(String data)
    {
        streamUrl=data;
        playerSettings = this.getActivity().getSharedPreferences(playerData, Context.MODE_PRIVATE);
        SharedPreferences.Editor editor = playerSettings.edit();
        editor.putString("streamLink", streamUrl);
        editor.commit();
        Toast.makeText(getActivity(),"Stream Saved"+streamUrl,Toast.LENGTH_LONG).show();
    }
}

Thanks in advance!


Solution

  • you are using two SharedPreferences playerSettings; one globally and one in onCreate and you are using upper one which is not initialized

       import android.content.Context;
        import android.content.SharedPreferences;
        import android.os.Bundle;
        import android.support.v4.app.Fragment;
        import android.view.LayoutInflater;
        import android.view.View;
        import android.view.ViewGroup;
        import android.widget.TextView;
        import android.widget.Toast;
    
        public class StreamFragment extends Fragment {
    
            public String streamUrl=null;
            TextView textView;
            public static final String playerData="pData";
            SharedPreferences playerSettings;
            public StreamFragment(){};
    
           @Override
            public void onCreate(Bundle state) {
                super.onCreate(state);
                playerSettings = getActivity().getSharedPreferences(playerData, Context.MODE_PRIVATE);
                streamUrl = playerSettings.getString("streamLink","No Link Found");
            }
    
            @Override
            public View onCreateView( LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
                View view =  inflater.inflate(R.layout.fragment_stream, container, false);
                playerSettings = getActivity().getSharedPreferences(playerData, Context.MODE_PRIVATE);
                streamUrl = playerSettings.getString("streamLink","No Link Found");
                //getData();
                Toast.makeText(getActivity(),"Stream Saved"+streamUrl,Toast.LENGTH_LONG).show();
                return view;
            }       
    
            public void getUrl(String data)
            {
                streamUrl=data;
                playerSettings = this.getActivity().getSharedPreferences(playerData, Context.MODE_PRIVATE);
                SharedPreferences.Editor editor = playerSettings.edit();
                editor.putString("streamLink", streamUrl);
                editor.commit();
                Toast.makeText(getActivity(),"Stream Saved"+streamUrl,Toast.LENGTH_LONG).show();
            }
        }