android - Commit 上的数据未保存在共享首选项中

标签 android android-fragments sharedpreferences storage android-preferences

我正在尝试将 fragment 接收到的数据保存到共享首选项中,以便在重新创建同一 fragment 时可以重用存储在共享首选项中的数据。但不知何故,数据没有被保存,偏好的默认值返回到我的 fragment 。 下面是代码。 实现 SharePreference 的 fragment

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();
    }
}

提前致谢!

最佳答案

代替 streamUrl = playerSettings.getString(streamUrl,"No Link Found");

你应该使用

streamUrl = playerSettings.getString("streamLink","No Link Found");

并且还使用 apply 而不是 commit

关于android - Commit 上的数据未保存在共享首选项中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41547534/

相关文章:

java - 如何在 NavigationDrawer 中使用 Google map ?

来自警报对话框的android日期选择器

java - 如何在其父布局之上绘制 View ?

android - Activity 销毁后 ImageView 上的图像丢失

Fragment 之间的 Android Tab 导航

java - Sharedpreferences 中的值输入无效

java - ImageView 变化不够快

android - 如何在 Fragment 中注册 Receiver

java - Android:Fragment中的sharedPreference,不从Class中读取数据

java - 通过对话框列表更改 Android 应用程序区域设置