【问题标题】:How can I fix this 'int android.content.SharedPreferences.getInt error?如何修复此“int android.content.SharedPreferences.getInt”错误?
【发布时间】:2021-06-01 10:12:35
【问题描述】:

我是编码新手,最近遇到一个错误,我找不到修复它的方法。我知道 NullPointerException 是什么,但我没有看到解决方案。是来自 GitHub 的代码(不是全部),所以不知道哪里出了问题。我试图记录自己。如果有人可以帮助我,我将不胜感激。

 Caused by: java.lang.NullPointerException: Attempt to invoke interface method 'int android.content.SharedPreferences.getInt(java.lang.String, int)' on a null object reference


 public class RunningFragment extends Fragment implements SensorEventListener {

// TODO: Rename parameter arguments, choose names that match
// the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
private static final String ARG_PARAM1 = "param1";
private static final String ARG_PARAM2 = "param2";

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

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

//Activity Views
private TextView dayRecordText;
private TextView stepText;
private TextView timeText;
private TextView orientationText;
private TextView distanceText;
private TextView achievedText;
private TextView speedText;

//Preferences are used to remember the step record of the day
private SharedPreferences sharedPreferences;
private int dayStepRecord;


@RequiresApi(api = Build.VERSION_CODES.M)
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if (getArguments() != null) {
        mParam1 = getArguments().getString(ARG_PARAM1);
        mParam2 = getArguments().getString(ARG_PARAM2);


        sensorManager = (SensorManager) getActivity().getSystemService(Context.SENSOR_SERVICE);
        stepDetectorSensor = sensorManager.getDefaultSensor(Sensor.TYPE_STEP_DETECTOR);
        accelerometer = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
        magnetometer = sensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);

        if (stepDetectorSensor == null)
            showErrorDialog();

        sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getActivity());
    }
}


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_running, container, false);
    //Initialize views
    stepText = (TextView) view.findViewById(R.id.stepText);
    timeText = (TextView) view.findViewById(R.id.timeText);
    speedText = (TextView) view.findViewById(R.id.speedText);
    distanceText = (TextView) view.findViewById(R.id.distanceText);
    orientationText = (TextView) view.findViewById(R.id.orientationText);
    achievedText = (TextView) view.findViewById(R.id.achievedText);
    setViewDefaultValues();
}
@Override
public void onResume() {
    super.onResume();
    dayStepRecord = sharedPreferences.getInt(SettingsActivity.DAY_STEP_RECORD, 3) * 1000;
    dayRecordText.setText(String.format(getResources().getString(R.string.record), dayStepRecord));
}

【问题讨论】:

    标签: java android sharedpreferences


    【解决方案1】:

    随便放

    sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getActivity());
    

    if (getArguments() != null) { 语句之外(关闭} 括号后的下一行)在onCreate

    事实上,仅当您想使用这些参数(方法getArguments().getString(...))时才应应用参数空值检查,无论如何/始终都应启动传感器和共享首选项

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (getArguments() != null) {
            mParam1 = getArguments().getString(ARG_PARAM1);
            mParam2 = getArguments().getString(ARG_PARAM2);
        } // new closing bracket in here
    
            sensorManager = (SensorManager) getActivity().getSystemService(Context.SENSOR_SERVICE);
            stepDetectorSensor = sensorManager.getDefaultSensor(Sensor.TYPE_STEP_DETECTOR);
            accelerometer = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
            magnetometer = sensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);
    
            if (stepDetectorSensor == null)
                showErrorDialog();
    
            sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getActivity());
        //} was here
    }
    

    【讨论】:

    • 谢谢,我按照建议做了,但没有任何改变。
    • 实际上,它修复了错误,但现在我有了一个新错误。我将编辑我的问题。
    • 问题是单一目的,如果你有新问题 - 发布新问题,这已经被回答(但遗憾的是不被接受......)
    【解决方案2】:

    您正在尝试从 sharedPreferences 调用名为 SettingsActivity.DAY_STEP_RECORD 的 int。确保已定义 sharedPreferences 并且 SettingsActivity.DAY_STEP_RECORD 存在于 sharedpreferences 中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-02-22
      • 2014-03-01
      • 2012-07-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多