未添加SQLite列/没有此类列问题

时间:2019-02-22 08:02:16

标签: java android sqlite android-recyclerview populate

当我单击晶圆厂时,我想在MainScreen JAVA中填充recyclerView。但是,当我单击fab时,只会发生的代码是clear(),我不知道是否将它们添加到SQLite数据库中,因为当我转到主屏幕时,recyclerview仍然为空...我不知道错误的含义是什么,我不知道代码中的错误是什么。请查看我的代码,请帮助。

错误行是switch语句中的以下代码:

mDatabase.insert(ItemContract.ItemEntry.TABLE_NAME, null, cv);

怎么了?

这是主屏幕代码

package com.example.admin.test2;


import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import android.widget.Toast;

import java.util.ArrayList;


/**
 * A simple {@link Fragment} subclass.
 */
public class MainScreen extends Fragment {

    private ArrayList <ExampleItem> mExampleList;

    private RecyclerView mRecyclerView;
    private RecyclerView.Adapter mAdapter;
    private RecyclerView.LayoutManager mLayoutManager;

    private ItemAdapter itemAdapter;

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

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment

        View view = inflater.inflate(R.layout.fragment_main_screen, container, false);

        ItemDBHelper dbHelper = new ItemDBHelper(getActivity());
        mDatabase = dbHelper.getWritableDatabase();

        mRecyclerView = (RecyclerView) view.findViewById(R.id.recyclerView);
        mRecyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
        itemAdapter = new ItemAdapter(getContext(), getAllItems());
        mRecyclerView.setAdapter(itemAdapter);

        /*
        mExampleList = new ArrayList <>();
        mExampleList.add(new ExampleItem(R.drawable.food, "", "", "ADD EXPENSES"));


        mRecyclerView = view.findViewById(R.id.recyclerView);
        mRecyclerView.setHasFixedSize(true);
        mLayoutManager = new LinearLayoutManager(getContext());
        mAdapter = new ExampleAdapter(mExampleList);

        mRecyclerView.setLayoutManager(mLayoutManager);
        mRecyclerView.setAdapter(mAdapter);
        */

        return view;
    }

    public SQLiteDatabase mDatabase;

    private Cursor getAllItems() {
        return mDatabase.query(
                ItemContract.ItemEntry.TABLE_NAME,
                null,
                null,
                null,
                null,
                null,
                null
        );
    }

}

这是昂贵的JAVA代码

package com.example.admin.test2;

import android.app.DatePickerDialog;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.design.widget.FloatingActionButton;
import android.support.v4.app.Fragment;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.Spinner;
import java.util.ArrayList;
import java.util.Calendar;

public class Expense extends Fragment {

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

    //SQLite DATABASE
    public SQLiteDatabase mDatabase;

    //SPINNER
    Spinner sp1;
    CustomAdapter adapter;
    String[] names = {"Food & Drink", "Shopping", "Transportation", "Home", "Bills & Fees", "Entertainment", "Healthcare", "Education", "Beauty", "Others"};
    int[] images = {R.drawable.food, R.drawable.shopping, R.drawable.transportation, R.drawable.home, R.drawable.bills, R.drawable.entertainment, R.drawable.medical, R.drawable.education, R.drawable.beauty, R.drawable.others};

    //DATE PICKER
    private EditText mDisplayDate;
    private DatePickerDialog.OnDateSetListener mDateSetListener;

    //FOR THE ADD ITEM
    FloatingActionButton fab;
    private ArrayList<ExampleItem> mExampleList;
    private RecyclerView mRecyclerView;
    private RecyclerView.Adapter mAdapter;
    private RecyclerView.LayoutManager mLayoutManager;

    EditText amount;
    EditText detail;

    private ItemAdapter itemAdapter;

    @Nullable
    @Override
    public View onCreateView(final LayoutInflater inflater, final ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View view = inflater.inflate (R.layout.fragment_expense, container, false);

        ItemDBHelper dbHelper = new ItemDBHelper(getActivity());
        mDatabase = dbHelper.getWritableDatabase();

        //spinner
        sp1 = (Spinner)view.findViewById(R.id.customSpinner);

        adapter = new CustomAdapter(getActivity(), names, images);
        sp1.setAdapter(adapter);

        //fab onClick - sending values to the recycler view
        fab = (FloatingActionButton) view.findViewById(R.id.fabs);
        amount = (EditText) view.findViewById(R.id.textAmountt);
        detail = (EditText) view.findViewById(R.id.textDetailss);

        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                int pos = sp1.getSelectedItemPosition();
                String label;

                String description = detail.getText().toString();
                Double value = Double.parseDouble(amount.getText().toString());

                ContentValues cv = new ContentValues();

                switch (pos)
                {
                    case 0:
                        label = "Food & Drink";
                        cv.put(ItemContract.ItemEntry.COLUMN_LABEL, label);
                        cv.put(ItemContract.ItemEntry.COLUMN_DETAIL, description);
                        cv.put(ItemContract.ItemEntry.COLUMN_AMOUNT, value);

                        mDatabase.insert(ItemContract.ItemEntry.TABLE_NAME, null, cv);
                        amount.getText().clear();
                        detail.getText().clear();
                    case 1:
                        label = "Shopping";
                        cv.put(ItemContract.ItemEntry.COLUMN_LABEL, label);
                        cv.put(ItemContract.ItemEntry.COLUMN_DETAIL, description);
                        cv.put(ItemContract.ItemEntry.COLUMN_AMOUNT, value);

                        mDatabase.insert(ItemContract.ItemEntry.TABLE_NAME, null, cv);
                        amount.getText().clear();
                        detail.getText().clear();
                    case 2:
                        label = "Transportation";
                        cv.put(ItemContract.ItemEntry.COLUMN_LABEL, label);
                        cv.put(ItemContract.ItemEntry.COLUMN_DETAIL, description);
                        cv.put(ItemContract.ItemEntry.COLUMN_AMOUNT, value);

                        mDatabase.insert(ItemContract.ItemEntry.TABLE_NAME, null, cv);
                        amount.getText().clear();
                        detail.getText().clear();
                    case 3:
                        label = "Home";
                        cv.put(ItemContract.ItemEntry.COLUMN_LABEL, label);
                        cv.put(ItemContract.ItemEntry.COLUMN_DETAIL, description);
                        cv.put(ItemContract.ItemEntry.COLUMN_AMOUNT, value);

                        mDatabase.insert(ItemContract.ItemEntry.TABLE_NAME, null, cv);
                        amount.getText().clear();
                        detail.getText().clear();
                    case 4:
                        label = "Bills & Fees";
                        cv.put(ItemContract.ItemEntry.COLUMN_LABEL, label);
                        cv.put(ItemContract.ItemEntry.COLUMN_DETAIL, description);
                        cv.put(ItemContract.ItemEntry.COLUMN_AMOUNT, value);

                        mDatabase.insert(ItemContract.ItemEntry.TABLE_NAME, null, cv);
                        amount.getText().clear();
                        detail.getText().clear();
                    case 5:
                        label = "Entertainment";
                        cv.put(ItemContract.ItemEntry.COLUMN_LABEL, label);
                        cv.put(ItemContract.ItemEntry.COLUMN_DETAIL, description);
                        cv.put(ItemContract.ItemEntry.COLUMN_AMOUNT, value);

                        mDatabase.insert(ItemContract.ItemEntry.TABLE_NAME, null, cv);
                        amount.getText().clear();
                        detail.getText().clear();
                    case 6:
                        label = "Healthcare";
                        cv.put(ItemContract.ItemEntry.COLUMN_LABEL, label);
                        cv.put(ItemContract.ItemEntry.COLUMN_DETAIL, description);
                        cv.put(ItemContract.ItemEntry.COLUMN_AMOUNT, value);

                        mDatabase.insert(ItemContract.ItemEntry.TABLE_NAME, null, cv);
                        amount.getText().clear();
                        detail.getText().clear();
                    case 7:
                        label = "Education";
                        cv.put(ItemContract.ItemEntry.COLUMN_LABEL, label);
                        cv.put(ItemContract.ItemEntry.COLUMN_DETAIL, description);
                        cv.put(ItemContract.ItemEntry.COLUMN_AMOUNT, value);

                        mDatabase.insert(ItemContract.ItemEntry.TABLE_NAME, null, cv);
                        amount.getText().clear();
                        detail.getText().clear();
                    case 8:
                        label = "Beauty";
                        cv.put(ItemContract.ItemEntry.COLUMN_LABEL, label);
                        cv.put(ItemContract.ItemEntry.COLUMN_DETAIL, description);
                        cv.put(ItemContract.ItemEntry.COLUMN_AMOUNT, value);

                        mDatabase.insert(ItemContract.ItemEntry.TABLE_NAME, null, cv);
                        amount.getText().clear();
                        detail.getText().clear();
                    case 9:
                        label = "Others";
                        cv.put(ItemContract.ItemEntry.COLUMN_LABEL, label);
                        cv.put(ItemContract.ItemEntry.COLUMN_DETAIL, description);
                        cv.put(ItemContract.ItemEntry.COLUMN_AMOUNT, value);

                        mDatabase.insert(ItemContract.ItemEntry.TABLE_NAME, null, cv);
                        amount.getText().clear();
                        detail.getText().clear();
                }

            }
        });

        //int pos = sp1.getSelectedItemPosition();

        //date picker
        mDisplayDate = (EditText) view.findViewById(R.id.datePick);

        mDisplayDate.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v) {
                Calendar cal = Calendar.getInstance();
                int year = cal.get(Calendar.YEAR);
                int month = cal.get(Calendar.MONTH);
                int day = cal.get(Calendar.DAY_OF_MONTH);

                DatePickerDialog dialog = new DatePickerDialog(getActivity(),
                        mDateSetListener,
                        year, month, day);
                dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
                dialog.show();

            }
        });

        mDateSetListener = new DatePickerDialog.OnDateSetListener() {
            @Override
            public void onDateSet(DatePicker view, int year, int month, int day) {
                //Calendar calendar = Calendar.getInstance();
                //String currentDate = DateFormat.getDateInstance().format(calendar.getTime());

                month = month + 1;
                String date = month + "-" + day + "-" + year;
                mDisplayDate.setText(date);


            }
        };

        return view;
    }
    }
}

这是图示符

package com.example.admin.test2;

import android.content.Context;
import android.database.Cursor;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.Switch;
import android.widget.TextView;

public class ItemAdapter extends RecyclerView.Adapter<ItemAdapter.ItemViewHolder> {

    private Context mContext;
    private Cursor mCursor;

    public ItemAdapter(Context context, Cursor cursor) {
        mContext = context;
        mCursor = cursor;

    }

    public class ItemViewHolder extends RecyclerView.ViewHolder {

        public ImageView itemImage;
        public TextView labelText;
        public TextView detailText;
        public TextView amountText;

        public ItemViewHolder(@NonNull View itemView) {
            super(itemView);

            itemImage = itemView.findViewById(R.id.imageIcon);
            labelText = itemView.findViewById(R.id.textLabel);
            detailText = itemView.findViewById(R.id.textDetails);
            amountText = itemView.findViewById(R.id.textAmount);
        }
    }

    @NonNull
    @Override
    public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int i) {
        LayoutInflater inflater = LayoutInflater.from(mContext);
        View view = inflater.inflate(R.layout.customlist, parent, false);
        return new ItemViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) {
        if (!mCursor.moveToPosition(position)){
            return;
        }

        String label = mCursor.getString(mCursor.getColumnIndex(ItemContract.ItemEntry.COLUMN_LABEL));
        String detail = mCursor.getString(mCursor.getColumnIndex(ItemContract.ItemEntry.COLUMN_DETAIL));
        double amount = mCursor.getDouble(mCursor.getColumnIndex(ItemContract.ItemEntry.COLUMN_AMOUNT));

        //holder.itemImage.setImageDrawable();
        switch (label){
            case "Food & Drink":
                holder.itemImage.setImageResource(R.drawable.food);
            case "Shopping":
                holder.itemImage.setImageResource(R.drawable.shopping);
            case "Transportation":
                holder.itemImage.setImageResource(R.drawable.transportation);
            case "Home":
                holder.itemImage.setImageResource(R.drawable.home);
            case "Bills & Fees":
                holder.itemImage.setImageResource(R.drawable.bills);
            case "Entertainment":
                holder.itemImage.setImageResource(R.drawable.entertainment);
            case "Healthcare":
                holder.itemImage.setImageResource(R.drawable.medical);
            case "Education":
                holder.itemImage.setImageResource(R.drawable.education);
            case "Beauty":
                holder.itemImage.setImageResource(R.drawable.beauty);
            case "Others":
                holder.itemImage.setImageResource(R.drawable.others);
        }
        holder.labelText.setText(label);
        holder.detailText.setText(detail);
        holder.amountText.setText(String.valueOf(amount));


    }

    @Override
    public int getItemCount() {
        return mCursor.getCount();
    }

    public void swapCursor (Cursor newCursor){
        if(mCursor != null){
            mCursor.close();
        }

        mCursor = newCursor;

        if (newCursor != null){
            notifyDataSetChanged();
        }
    }
}

ITEMDBHELPER代码

package com.example.admin.test2;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import com.example.admin.test2.ItemContract.*;


public class ItemDBHelper extends SQLiteOpenHelper {

    public static final String DATABASE_NAME = "itemlist.db";
    public static final int DATABASE_VERSION = 1;

    public ItemDBHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        final String SQL_CREATE_ITEMLIST_TABLE = "CREATE TABLE " + ItemEntry.TABLE_NAME + " (" +
                ItemEntry.COLUMN_LABEL + " TEXT NOT NULL, " +
                ItemEntry.COLUMN_DETAIL + " TEXT, " +
                ItemEntry.COLUMN_AMOUNT + "DOUBLE NOT NULL" +
                ");";

        db.execSQL(SQL_CREATE_ITEMLIST_TABLE);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("DROP TABLE IF EXISTS " + ItemEntry.TABLE_NAME);
        onCreate(db);
    }
}

项目合同代码

package com.example.admin.test2;

import android.provider.BaseColumns;

public class ItemContract {

    private ItemContract() {}

    public static final class ItemEntry implements BaseColumns
    {
        public static final String TABLE_NAME = "itemList";
        public static final String COLUMN_LABEL = "label";
        public static final String COLUMN_AMOUNT = "amount";
        public static final String COLUMN_DETAIL = "detail";

    }
}

出现此错误

E/SQLiteLog: (1) table itemList has no column named amount
E/SQLiteDatabase: Error inserting amount=500.0 label=Food & Drink detail=jsjdjdj
    android.database.sqlite.SQLiteException: table itemList has no column named amount (code 1): , while compiling: INSERT INTO itemList(amount,label,detail) VALUES (?,?,?)
    #################################################################
    Error Code : 1 (SQLITE_ERROR)
    Caused By : SQL(query) error or missing database.
        (table itemList has no column named amount (code 1): , while compiling: INSERT INTO itemList(amount,label,detail) VALUES (?,?,?))
    #################################################################
        at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
        at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:1096)
        at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:661)
        at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
        at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:59)
        at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:31)
        at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1902)
        at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1771)
        at com.example.admin.test2.Expense$1.onClick(Expense.java:94)
        at android.view.View.performClick(View.java:6897)
        at android.view.View$PerformClick.run(View.java:26101)
        at android.os.Handler.handleCallback(Handler.java:789)
        at android.os.Handler.dispatchMessage(Handler.java:98)
        at android.os.Looper.loop(Looper.java:164)
        at android.app.ActivityThread.main(ActivityThread.java:6944)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374).... this continues

0 个答案:

没有答案