当前位置: 首页 > 知识库问答 >
问题:

Android Studio共享首选项

宋飞舟
2023-03-14

非常感谢您的光临,我正在为学校开发一个应用程序,我遇到了另一个问题。该应用程序的主要思想是跟踪您的卡路里,我希望它能节省卡路里,所以当应用程序关闭时,它仍然会记住他们。我已经忙了一段时间了,现在尝试使用SavedPreferences,但我总是出现错误。我希望有人能帮我。

public class CaloriesEaten extends Fragment {

private Context mContext;
private static final String ARG_PARAM1 = "param1";
private static final String ARG_PARAM2 = "param2";
private static EditText caleaten;
private static EditText calalready;
private static TextView caltotal;
private static Button btnClick;
private EditText editText;
//private String calalreadystring = calalready.getText().toString();
//int CalCount = Integer.parseInt(calalreadystring);
Context context = getActivity();
SharedPreferences pref = context.getSharedPreferences("MyCalories", Context.MODE_PRIVATE);

// TODO: Rename and change types of parameters
private String mParam1;
private String mParam2;

private OnFragmentInteractionListener mListener;

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

public static CaloriesEaten newInstance(String param1, String param2) {
    CaloriesEaten fragment = new CaloriesEaten();
    Bundle args = new Bundle();
    args.putString(ARG_PARAM1, param1);
    args.putString(ARG_PARAM2, param2);
    fragment.setArguments(args);
    return fragment;
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if (getArguments() != null) {
        mParam1 = getArguments().getString(ARG_PARAM1);
        mParam2 = getArguments().getString(ARG_PARAM2);
    }
    String keki = pref.getString("CalorieCounter", "");
    editText.setText(keki);
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {        View view =  inflater.inflate(R.layout.fragment_calories_eaten,
        container, false);


    caleaten = (EditText) view.findViewById(R.id.CalorieInput);
    calalready = (EditText) view.findViewById(R.id.Cals);
    caltotal = (TextView) view.findViewById(R.id.CalNumber);
    btnClick = (Button)view.findViewById(R.id.addcalories);
    btnClick.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            buttonClicked(v);
        }
    });

    return view;
}
public void buttonClicked (View view) {

    int x = Integer.parseInt(caleaten.getText().toString());

    int y = Integer.parseInt(calalready.getText().toString());

    int total = x + y;

    caltotal.setText(Integer.toString(total));
    calalready.setText(Integer.toString(total));
    caleaten.setText("");
    SharedPreferences.Editor edit = pref.edit();
    String calalreadystring = calalready.getText().toString();
    int CalCount = Integer.parseInt(calalreadystring);
    edit.putInt("CalorieCounter", CalCount);
    edit.commit();


}
public void onButtonPressed(Uri uri) {
    if (mListener != null) {
        mListener.onFragmentInteraction(uri);
    }
}

@Override
public void onAttach(Context context) {
    super.onAttach(context);
    if (context instanceof OnFragmentInteractionListener) {
        mListener = (OnFragmentInteractionListener) context;
    } else {
        throw new RuntimeException(context.toString()
                + " must implement OnFragmentInteractionListener");
    }
}

@Override
public void onDetach() {
    super.onDetach();
    mListener = null;
}

public interface OnFragmentInteractionListener {
    // TODO: Update argument type and name
    void onFragmentInteraction(Uri uri);
}

}

我可能做了很多明显的愚蠢的事情,但我真的弄不明白。

多谢!

共有1个答案

宿景曜
2023-03-14

全局声明SharedPreferences并在onCreateView方法内部初始化,

例如:

Context context; 
SharedPreferences pref;
.......
...
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {        View view =  inflater.inflate(R.layout.fragment_calories_eaten,
        container, false);

context = getActivity();
pref = context.getSharedPreferences("MyCalories", Context.MODE_PRIVATE);

.............
....
}
 类似资料:
  • 对于下面的代码,我正在尝试检索共享的首选项,我认为它保存正确,但当我回到登录屏幕时,所有的数据都消失了。我需要它留在我回到这个屏幕上。所以我在个人资料页面上输入姓名、年龄和id到三个单独的行中。然后按下save按钮,然后按下action Bar上的back转到前面的页面。当我回到个人资料页面时,我的信息应该还在那里,但它没有任何帮助?

  • 更新崩溃日志:

  • 当我发送FCM消息且应用程序处于后台时,我想清除共享首选项。在方法中,我正在调用一个方法来清除它们。 我得到以下错误: 未处理的异常:MissingPluginException(在channel plugins.flatter.io/shared_首选项上找不到方法getAll的实现)

  • 问题内容: 我在这个.java文件中有一个SharedPreference;在底部,您可以看到我将值保存到SharedPreferences GB_PREFERENCES_BENCH和GB_PREFERENCES_FLIES。如何在其他活动中使用这些值?请参阅第二个代码示例以了解如何使用它。 这是我要使用的方式;(特别是在on create方法中,将TextView的文本设置为SharePrefe

  • 我正在创建一个番茄工作计时器应用程序。它有2项活动: 主要活动是设置时间 我已经创建了一个对象,它保存了设置的时间,我希望这些时间显示在Recents活动中的按钮中。但是,似乎没有保存数据,而是显示了包名称。

  • 你好,我正在尝试保存一个共享首选项的主题。当用户点击某个主题的按钮时,我希望该主题被设置为默认并保存,所以当他们重新打开应用程序时,它仍然是那个新主题。