首页 > 解决方案 > 我已成功将微调器项目存储在 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
    }

标签: javaandroidandroid-spinner

解决方案


推荐阅读