java - 我已成功将微调器项目存储在 Sqlite 数据库上,但是当我重新打开我的应用程序时,微调器对象读取为 null
问题描述
我正在努力将微调器对象保存在我的 SQLite 数据库中,我已经设法让它显示在我的适配器上,但是每次我关闭我的应用程序并重新打开它时都会说null
,但是当我导航到另一个空间并返回它时,它会恢复,下面是我的代码我做错了什么?
public class ExpenseDetailFragment extends Fragment {
private View view;
private ExpenseData selectedExpenseData;
private final int PICKER_REQUEST = 1;
private Activity activity = null;
private String currency = "USD";
private Spinner currencyd;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
view = inflater.inflate(R.layout.fragment_expense_detail, container, false);
activity = this.getActivity();
selectedExpenseData = (ExpenseData) getArguments().getSerializable("selectedExpenseData");
ImageButton storeExpenseButton = getActivity().findViewById(R.id.addExpense);
Button deleteButton = view.findViewById(R.id.deleteButton);
currencyd = getActivity().findViewById(R.id.currency_spinner);
storeExpenseButton.setImageResource(R.drawable.ic_action_done);
currencyd.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
currency = adapterView.getItemAtPosition(i).toString();
}
@Override
public void onNothingSelected(AdapterView<?> adapterView) {
//adapterView.getLastVisiblePosition();
}
});
//button
storeExpenseButton.setOnClickListener(v -> {
String cur = currencyd.getSelectedItem().toString();
TextView amountTextView1 = getActivity().findViewById(R.id.amount);
try {
double amount = Double.valueOf(amountTextView1.getText().toString());
selectedExpenseData.setExpenseAmount(amount);
} catch (NumberFormatException e) {
Toast.makeText(getContext(), "Budget created", Toast.LENGTH_SHORT).show();
}
selectedExpenseData.setCurrency(cur);
if (selectedExpenseData.getId() != 0)
updateExpense(v, selectedExpenseData);
else
storeExpense(v, selectedExpenseData);
});
return view;
}
private void storeExpense(View view, ExpenseData expenseData) {
ContentValues values = new ContentValues();
values.put(ExpensesContract.ExpenseEntry.COLUMN_EXPENSE_CURRENCY, expenseData.getCurrency());
if (uri == null) {
Toast.makeText(this.getActivity(), R.string.editor_save_expense_failed,
Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(this.getActivity(), R.string.editor_save_expense_successful,
Toast.LENGTH_SHORT).show();
checkBudgets(expenseData.getExpenseName());
}
getActivity().finish();
Intent intent = new Intent(this.getActivity(), MainActivity.class); //remove this after fix
startActivity(intent);//remove this after fix
}
private void updateExpense(@SuppressWarnings("unused") View view, ExpenseData expenseData) {
Uri currentExpenseURI = ContentUris.withAppendedId(ExpensesContract.ExpenseEntry.CONTENT_URI, expenseData.getId());
ContentValues values = new ContentValues();
values.put(ExpensesContract.ExpenseEntry.COLUMN_EXPENSE_CURRENCY, expenseData.getCurrency());
int rowsAffected = getActivity().getContentResolver().update(currentExpenseURI, values, null, null);
if (rowsAffected == 0) {
Toast.makeText(this.getActivity(), getString(R.string.editor_update_expense_failed),
Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(this.getContext(), getString(R.string.editor_update_expense_successful),
Toast.LENGTH_SHORT).show();
checkBudgets(expenseData.getExpenseName());
}
getActivity().finish();
Intent intent = new Intent(this.getActivity(), MainActivity.class); //remove this after fix
startActivity(intent);//remove this after fix
}
解决方案
推荐阅读
- angular - ng test 和 ng serve 失败并显示“发生未处理的异常:无效或意外的令牌”
- sql - SQL - 13 个数字列的组合如何等于 1 列
- javascript - 如何使用ajax get rest api从aws s3获取对象
- python - 如何使用 Selenium 和 Python 从通过 xpath 找到的 webdriver 元素中提取文本
- javascript - 如何仅从第一页和最后一页删除按钮?
- javascript - 从 html 模板字符串中删除额外的元素
- model-view-controller - MVC 文件夹结构和用例中操作的最佳实践
- sql-server - 用 ssis 中的用户变量覆盖表达式中的 zip 文件
- php - 防止在转换时在 XML 文件中添加 LF
- c# - 如何在 OpenID-Connect OWIN MVC 中重定向之前执行操作