因此,我目前正在学习Android,并且一切进展顺利。但是,在尝试构建片段之后,我遇到了空指针异常。我在OnCreateView中声明了我的视图,但没有执行任何操作。下面发布的是我的代码。
private String TotalMoney;
private BigDecimal BigDecimalTotalMoney;
private SharedPreferences settings;
private SharedPreferences.Editor prefEditor;
@SuppressLint("SimpleDateFormat")
private SimpleDateFormat ft = new SimpleDateFormat ("E MM.dd.yyyy 'at' hh:mm a");
private TextView totalMoneyTextView;
private EditText Submission;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
// Inflate the layout for this fragment
View v = inflater.inflate(R.layout.wallettracker, container, false);
TextView totalMoneyTextView = (TextView) v.findViewById(R.id.TotalMoneyTextView);
EditText Submission = (EditText) v.findViewById(R.id.editTextMoney);
Button submitButton = (Button) v.findViewById(R.id.submitButton);
TextView dateTextView = (TextView) v.findViewById(R.id.dateTextView);
Button subtractButton = (Button) v.findViewById(R.id.subtractButton);
return v;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
settings = this.getActivity().getSharedPreferences("Money Data", 0);
TotalMoney = settings.getString("TotalMoney", "0.00");
totalMoneyTextView.setText(DecimalFormat.getCurrencyInstance().format(Double.parseDouble(TotalMoney)).toString());
最后一行虽然很长而且很难看,但却是引发错误的地方。当这是一个独立的活动时,此代码运行得很好,我感到很沮丧。
最佳答案
在基于片段的应用程序中,onCreate在onCreateView之前被调用。因此,当您使用长行时,totalMoneyTextView尚未引用任何内容。
看一下片段lifecycle diagram。
仅在定义TextView之后,才应该为totalMoneyTextView设置文本,如下所示:
TextView totalMoneyTextView = (TextView) v.findViewById(R.id.TotalMoneyTextView);
totalMoneyTextView.setText(DecimalFormat.getCurrencyInstance().format(Double.parseDouble(TotalMoney)).toString());
关于java - fragment 中的空指针异常,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24792867/