当我单击晶圆厂时,我想在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