Android 无法从总数中减去SharedReference编号

Android 无法从总数中减去SharedReference编号,android,listview,android-fragments,sharedpreferences,android-preferences,Android,Listview,Android Fragments,Sharedpreferences,Android Preferences,我正在开发一个卡路里应用程序,用户可以输入他们的消费量 然后显示他们还剩下多少卡路里。我为SharedReferences创建了一个xml,用户在其中输入目标数量 问题:获取共享首选项以减去我的列表视图总数 现在,应用程序正在显示总金额。文本视图称之为卡路里总量。而不是显示总希望它显示还押 FragmentHome.java public class FragmentHome extends DialogFragment implements View.OnClickListener {

我正在开发一个卡路里应用程序,用户可以输入他们的消费量 然后显示他们还剩下多少卡路里。我为SharedReferences创建了一个xml,用户在其中输入目标数量

问题:获取共享首选项以减去我的列表视图总数

现在,应用程序正在显示总金额。文本视图称之为卡路里总量。而不是显示总希望它显示还押

FragmentHome.java

 public class FragmentHome extends DialogFragment implements View.OnClickListener {
      private TextView caloriesTotal;
      private ListView listView;
      private LinearLayout mLayout;
      ImageButton AddEntrybtn;
      CalorieDatabase calorieDB;
      Context context;
      private int foodCalories;
      Button mButton;
      //Database
      private DatabaseHandler dba;
      private ArrayList<Food> dbFoods = new ArrayList<>();
      private CustomListViewAdapter foodAdapter;
      private Food myFood ;
      //fragment
      private android.support.v4.app.FragmentManager fragmentManager;
      private FragmentTransaction fragmentTransaction;
      public FragmentHome() {
         // Required empty public constructor
      }
      @Override
      public View onCreateView(LayoutInflater inflater, ViewGroup
      container,Bundle savedInstanceState) {
          View myView = inflater.inflate(R.layout.fragment_home, false);
          AddEntrybtn = (ImageButton) myView.findViewById(R.id.AddItems);
          AddEntrybtn.setOnClickListener(new View.OnClickListener() {
              @Override
              public void onClick(View arg0) {
                  ((appMain) getActivity()).loadSelection(1);
              }
          });
      caloriesTotal = (TextView) myView.findViewById(R.id.tv_calorie_amount);
      listView = (ListView) myView.findViewById(R.id.ListId);
      refreshData();
      return myView;
      }
      public void refreshData (){
      dbFoods.clear();
      dba = new DatabaseHandler(getContext());
      ArrayList<Food> foodsFromDB = dba.getFoods();
      int totalCalorie = dba.totalCalories();
      String formattedCalories = Utils.formatNumber(totalCalorie);
      //setting the editTexts:
      String Prefs="" ;
      caloriesTotal.setText("Total Calories: " + formattedCalories  );
      SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(context);
      SharedPreferences.Editor editor = sp.edit();
      editor.putString("prefs_key_current_calorie_amount", String.valueOf(Prefs));
      editor.apply();
      //Loop
      for (int i = 0; i < foodsFromDB.size(); i ++){
          String name = foodsFromDB.get(i).getFoodName();
          String date = foodsFromDB.get(i).getRecordDate();
          int cal = foodsFromDB.get(i).getCalories();
          int foodId = foodsFromDB.get(i).getFoodId();
          Log.v("Food Id", String.valueOf(foodId));
          myFood= new Food();
          myFood.setFoodId(foodId);
          myFood.setFoodName(name);
          myFood.setCalories(cal);
          myFood.setRecordDate(date);
          dbFoods.add(myFood);
     }
     dba.close();
     //setting food Adapter:
     foodAdapter = new CustomListViewAdapter(getActivity(), 
     R.layout.row_item,dbFoods);
     listView.setAdapter(foodAdapter);
     foodAdapter.notifyDataSetChanged();
     }
     @Override
     public void onActivityCreated(Bundle savedInstanceState) {
         super.onActivityCreated(savedInstanceState);
         Bundle username = getActivity().getIntent().getExtras();
         String username1 = username.getString("Username");
         TextView userMain= (TextView) getView().findViewById(R.id.User);
         userMain.setText(username1);
     }
     @Override
     public void onClick(View v) {
         switch (v.getId()) {
         case R.id.AddItems:
         AddEntry addEntry = new AddEntry();
         fragmentTransaction = fragmentManager.beginTransaction();
         fragmentTransaction.addToBackStack(null);
         fragmentTransaction.replace(R.id.FragmentHolder,addEntry)
         .commit();
         break;
         case R.id.action_settings:
         Intent preferenceScreenIntent = new Intent(getContext(), 
         PreferenceScreenActivity.class);
         startActivity(preferenceScreenIntent);
         break;
         }
     }
} 
公共类FragmentHome扩展DialogFragment实现View.OnClickListener{
私有文本视图卡路里总量;
私有列表视图列表视图;
私人线路布局;
图像按钮加法器;
卡雷达酶卡雷达B;
语境;
私人国际食品公司;
钮扣;
//数据库
专用数据库处理程序dba;
private ArrayList dbFoods=new ArrayList();
私有CustomListViewAdapter foodAdapter;
私人食品;
//碎片
私有android.support.v4.app.FragmentManager FragmentManager;
私人碎片交易;
公共家庭(){
//必需的空公共构造函数
}
@凌驾
创建视图上的公共视图(布局、充气机、视图组
容器,捆绑包savedInstanceState){
视图myView=充气机。充气(R.layout.fragment\u home,false);
AddEntrybtn=(ImageButton)myView.findViewById(R.id.AddItems);
AddEntrybtn.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图arg0){
((appMain)getActivity()).loadSelection(1);
}
});
卡路里总量=(TextView)myView.findViewById(R.id.tv\u卡路里量);
listView=(listView)myView.findViewById(R.id.ListId);
刷新数据();
返回myView;
}
公共数据(){
dbFoods.clear();
dba=newDatabaseHandler(getContext());
ArrayList foodsFromDB=dba.getFoods();
int totalcarrie=dba.totalcarries();
字符串formattedcarries=Utils.formattNumber(总卡路里);
//设置编辑文本:
字符串Prefs=“”;
卡路里总量.setText(“总卡路里:+形成的卡路里”);
SharedReferences sp=PreferenceManager.GetDefaultSharedReferences(上下文);
SharedReferences.Editor=sp.edit();
putString(“prefs\u key\u current\u carorie\u amount”,String.valueOf(prefs));
editor.apply();
//环路
for(int i=0;i
activity_preference.xml

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
    <PreferenceCategory android:title="User Settings">
        <EditTextPreference
            android:title="Daily Calorie Amount"
            android:inputType="number"
            android:key="@string/prefs_key_daily_calorie_amount"
            android:summary="@string/prefs_description_daily_calorie_amount" />
    </PreferenceCategory>
</PreferenceScreen>

您可以使用类似的方法从SharedReference保存和检索整数:

savePrefs("calories", totalCalories);
totalCalories = loadPrefs("calories", totalCalories);

    //save prefs
    public void savePrefs(String key, int value) {
        SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
        SharedPreferences.Editor editor = sharedPreferences.edit();
        editor.putInt(key, value);
        editor.apply();

    //get prefs
    public int loadPrefs(String key, int value) {
        SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
        return sharedPreferences.getInt(key, value);
    }
还有许多关于StackOverFlow的类似问题的例子,展示了如何使用SharedReference

下面是一些来自developer.android.com的SharedReferences文档:

这是个愚蠢的问题,但你能检索总热量,减去消耗的热量,然后将结果存储回共享偏好吗?它看起来像是caloriesTotal.setText显示总卡路里,因为您告诉它这样做。将文本设置为字符串+变量formattedCarries。格式化卡路里的定义是UTIL。formatNumber(总卡路里)我还没试过。我不知道如何从共享偏好中获得价值。这就是我想要做的,得到这个值,然后把它恢复到总热量中。这是我第一次使用java开发应用程序。我知道这可能是个愚蠢的问题