java - 如何修复此“int android.content.SharedPreferences.getInt”错误?
问题描述
我是编码新手,最近遇到一个错误,我找不到修复它的方法。我知道 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));
}
解决方案
就放
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
}
推荐阅读
- node.js - 发送 2 个 http 并发请求
- reactjs - Material UI IndicatorIcon 反应
- javascript - Vue/Axios - 使用 url 中的表单数据修补请求?
- python - 用python保存html页面
- c# - 为什么我没有将对象引用设置为对象的实例
- sql - Code First 迁移 - SQL 更新列,其中包含来自同一表中另一行的数据
- javascript - (MetaMask - Javascript)sendTransaction 的值格式问题
- sql - Oracle 字符串连接太长
- android - Alternate of ProgressDialog
- django - 未设置 Django CSRF cookie:使用 Ajax 跨站点