Android recyclerView没有';t显示';雷亚尔';我的列表项的数据

Android recyclerView没有';t显示';雷亚尔';我的列表项的数据,android,sqlite,Android,Sqlite,我已经实现了一个recyclerView和一个SQLite数据库来保存/检索recyclerView的数据,但是我在recyclerView上获得的数据不是应该显示的数据。在没有SQLite db的情况下,recyclerView正常工作 单击加号时,将弹出一个带有EditText字段的对话框,用户可以在其中键入信息: 这是DialogFragment类,用户应在其中写入信息: public class DialogAdd extends DialogFragment { private B

我已经实现了一个recyclerView和一个SQLite数据库来保存/检索recyclerView的数据,但是我在recyclerView上获得的数据不是应该显示的数据。在没有SQLite db的情况下,recyclerView正常工作

单击加号时,将弹出一个带有EditText字段的对话框,用户可以在其中键入信息:

这是DialogFragment类,用户应在其中写入信息:

public class DialogAdd extends DialogFragment {

private Button okButton;
private EditText name, quantity, location, normalPrice, offerPrice;
private List<ShopListItem> shopListItem;
private Context context;
DatabaseHelper dbHelper;


@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    dbHelper = new DatabaseHelper(getContext());

    shopListItem = new ArrayList<>();
    context = getActivity();
}


@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

    final View rootView = inflater.inflate(R.layout.add_productdialog,container, false);
    getDialog().setCanceledOnTouchOutside(false);
    getDialog().setTitle("Add to shoplist");




    name = (EditText) rootView.findViewById(R.id.dialog_productname);
    quantity = (EditText) rootView.findViewById(R.id.dialog_qantity);
    location = (EditText) rootView.findViewById(R.id.dialog_location);
    normalPrice = (EditText) rootView.findViewById(R.id.dialog_normalPrice);
    offerPrice = (EditText) rootView.findViewById(R.id.dialog_offerPrice);

    okButton = (Button) rootView.findViewById(R.id.dialog_okButton);
    okButton.getBackground().setColorFilter(Color.parseColor("#2fbd4b"), PorterDuff.Mode.MULTIPLY);
    okButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {


            if (name.getText().toString().isEmpty()) {
                Toast.makeText(context, "You must add a name", Toast.LENGTH_LONG).show();
            } else {

              dbHelper.insertData(name.toString() ,quantity.toString(),location.toString(),normalPrice.toString(),offerPrice.toString());
                getDialog().dismiss();
            }


        }
    });

    return rootView;

}
public class MainActivity extends AppCompatActivity{


private ImageButton addbutton;
private DialogAdd dialogAdd;
public static RecyclerView recyclerView;
private List<ShopListItem> shopListItems;
private SQLiteDatabase db;
private Cursor cursor;
private DatabaseHelper databaseHelper;
private ShoplistAdapter adapter;



@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.shoppinglist_mainactivity);


    databaseHelper = new DatabaseHelper(this);

    addbutton = (ImageButton) findViewById(R.id.addbtn);
    addbutton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            dialogAdd = new DialogAdd();
            dialogAdd.show(getSupportFragmentManager(), "addDialog");
        }
    });



    //RecyclerView
    recyclerView = (RecyclerView)findViewById(R.id.rv_shoppinglist);
    LinearLayoutManager linearLayoutManager = new LinearLayoutManager(App.getAppContex());
    linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
    recyclerView.setLayoutManager(linearLayoutManager);



    initializeData();
    adapter = new ShoplistAdapter(shopListItems);
    recyclerView.setAdapter(adapter);


}


private void initializeData(){

    shopListItems = new ArrayList<>();
    Cursor resultset = databaseHelper.getAllData();

    if (resultset.moveToFirst()){
        while(!resultset.isAfterLast()){

            shopListItems.add(new ShopListItem(resultset.getString(1), resultset.getString(2), resultset.getString(3), resultset.getString(4), resultset.getString(5)));

            resultset.moveToNext();
        }
    }
    resultset.close();


    shopListItems.add(new ShopListItem("Potato", "2 KG", "MALL", "7 kr", ""));
}
public class DatabaseHelper extends SQLiteOpenHelper {

public static final String DATABASE_NAME ="dbshoplist.db";
public static final String TABLE_NAME ="product_table";

public static final String COL_ID = "ID";
public static final String COL_NAME ="NAME";
public static final String COL_QTY ="QUANTITY";
public static final String COL_LOCATION ="LOCATION";
public static final String COL_PRICE1 ="PRICE1";
public static final String COL_PRICE2 ="PRICE2";


/*
This constructor creates the database
 */
public DatabaseHelper(Context context) {
    super(context, DATABASE_NAME, null, 1);
    SQLiteDatabase db = this.getWritableDatabase();
}


@Override
public void onCreate(SQLiteDatabase db) {

    db.execSQL("CREATE TABLE " + TABLE_NAME + " (ID INTEGER PRIMARY KEY AUTOINCREMENT,NAME TEXT,QUANTITY TEXT,LOCATION TEXT,PRICE1 TEXT,PRICE2 TEXT)");


}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

    db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
    onCreate(db);
}


public boolean insertData(String name, String qty, String location, String price1, String price2){


    SQLiteDatabase db = this.getWritableDatabase();

    // content value is a row, and we fill it with the put();
    ContentValues contentValues = new ContentValues();
    contentValues.put(COL_NAME, name);
    contentValues.put(COL_QTY, qty);
    contentValues.put(COL_LOCATION, location);
    contentValues.put(COL_PRICE1, price1);
    contentValues.put(COL_PRICE2, price2);


    long result = db.insert(TABLE_NAME, null,contentValues);

    if(result == -1) {
        return false;
    }else{
        return true;
        }
    }


public Cursor getAllData(){

    SQLiteDatabase db = this.getWritableDatabase();
    Cursor cursorResults = db.rawQuery("SELECT * FROM " + TABLE_NAME, null);
    return cursorResults;

}
 public class ShoplistAdapter extends RecyclerView.Adapter<ShoplistAdapter.ViewHolder>{

List<ShopListItem> shopListItems;
public ShoplistAdapter(List<ShopListItem> shopListItems) {
    this.shopListItems = shopListItems;
}


@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

    Context context = parent.getContext();
    LayoutInflater inflater = LayoutInflater.from(context);
    View shoplist_itemView = inflater.inflate(R.layout.shop_list_item, parent, false);
    ViewHolder viewHolder = new ViewHolder(shoplist_itemView);

    return viewHolder;
}

@Override
public void onBindViewHolder(final ViewHolder holder, final int position) {


    holder.location.setText(shopListItems.get(position).location.toString());
    holder.normalPrice.setText(shopListItems.get(position).normalprice.toString());
    holder.offerPrice.setText(shopListItems.get(position).offerprice.toString());

    StringBuilder stringBuilder = new StringBuilder();
    stringBuilder.append(shopListItems.get(position).quantity + "  " + shopListItems.get(position).name);
    holder.productname.setText(stringBuilder);

    if(!shopListItems.get(position).offerprice.toString().isEmpty()){
        holder.normalPrice.setPaintFlags(holder.normalPrice.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);

    }

    if(shopListItems.get(position).normalprice.isEmpty()){
        holder.normalPrice.setVisibility(View.GONE);
    }


    holder.checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {

            if(isChecked == true){
                holder.productname.setPaintFlags(holder.productname.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
                holder.productname.setTextColor(Color.parseColor("#40000000"));
            }else{
                holder.productname.setPaintFlags(0 | Paint.ANTI_ALIAS_FLAG);
                holder.productname.setTextColor(Color.BLACK);
            }
        }
    });
}

@Override
public int getItemCount() {
    return shopListItems.size();
}


public static class ViewHolder extends RecyclerView.ViewHolder{


    private CheckBox checkBox;
    private TextView productname, quantity, location, normalPrice, offerPrice;
    private ImageButton edit_icon, delete_icon;

    public ViewHolder(View itemView) {
        super(itemView);

        productname = (TextView)itemView.findViewById(R.id.product_name);
        location = (TextView)itemView.findViewById(R.id.product_location);
        normalPrice = (TextView)itemView.findViewById(R.id.product_price);
        offerPrice = (TextView)itemView.findViewById(R.id.product_offer_price);
        edit_icon = (ImageButton)itemView.findViewById(R.id.editShopItem_Icon);
        delete_icon = (ImageButton)itemView.findViewById(R.id.shopitem_delete_icon);
        checkBox = (CheckBox) itemView.findViewById(R.id.bought_checkbox);

    }
}

@Override
public void onAttachedToRecyclerView(RecyclerView recyclerView) {
    super.onAttachedToRecyclerView(recyclerView);
}
我的recyclerView适配器类:

public class DialogAdd extends DialogFragment {

private Button okButton;
private EditText name, quantity, location, normalPrice, offerPrice;
private List<ShopListItem> shopListItem;
private Context context;
DatabaseHelper dbHelper;


@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    dbHelper = new DatabaseHelper(getContext());

    shopListItem = new ArrayList<>();
    context = getActivity();
}


@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

    final View rootView = inflater.inflate(R.layout.add_productdialog,container, false);
    getDialog().setCanceledOnTouchOutside(false);
    getDialog().setTitle("Add to shoplist");




    name = (EditText) rootView.findViewById(R.id.dialog_productname);
    quantity = (EditText) rootView.findViewById(R.id.dialog_qantity);
    location = (EditText) rootView.findViewById(R.id.dialog_location);
    normalPrice = (EditText) rootView.findViewById(R.id.dialog_normalPrice);
    offerPrice = (EditText) rootView.findViewById(R.id.dialog_offerPrice);

    okButton = (Button) rootView.findViewById(R.id.dialog_okButton);
    okButton.getBackground().setColorFilter(Color.parseColor("#2fbd4b"), PorterDuff.Mode.MULTIPLY);
    okButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {


            if (name.getText().toString().isEmpty()) {
                Toast.makeText(context, "You must add a name", Toast.LENGTH_LONG).show();
            } else {

              dbHelper.insertData(name.toString() ,quantity.toString(),location.toString(),normalPrice.toString(),offerPrice.toString());
                getDialog().dismiss();
            }


        }
    });

    return rootView;

}
public class MainActivity extends AppCompatActivity{


private ImageButton addbutton;
private DialogAdd dialogAdd;
public static RecyclerView recyclerView;
private List<ShopListItem> shopListItems;
private SQLiteDatabase db;
private Cursor cursor;
private DatabaseHelper databaseHelper;
private ShoplistAdapter adapter;



@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.shoppinglist_mainactivity);


    databaseHelper = new DatabaseHelper(this);

    addbutton = (ImageButton) findViewById(R.id.addbtn);
    addbutton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            dialogAdd = new DialogAdd();
            dialogAdd.show(getSupportFragmentManager(), "addDialog");
        }
    });



    //RecyclerView
    recyclerView = (RecyclerView)findViewById(R.id.rv_shoppinglist);
    LinearLayoutManager linearLayoutManager = new LinearLayoutManager(App.getAppContex());
    linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
    recyclerView.setLayoutManager(linearLayoutManager);



    initializeData();
    adapter = new ShoplistAdapter(shopListItems);
    recyclerView.setAdapter(adapter);


}


private void initializeData(){

    shopListItems = new ArrayList<>();
    Cursor resultset = databaseHelper.getAllData();

    if (resultset.moveToFirst()){
        while(!resultset.isAfterLast()){

            shopListItems.add(new ShopListItem(resultset.getString(1), resultset.getString(2), resultset.getString(3), resultset.getString(4), resultset.getString(5)));

            resultset.moveToNext();
        }
    }
    resultset.close();


    shopListItems.add(new ShopListItem("Potato", "2 KG", "MALL", "7 kr", ""));
}
public class DatabaseHelper extends SQLiteOpenHelper {

public static final String DATABASE_NAME ="dbshoplist.db";
public static final String TABLE_NAME ="product_table";

public static final String COL_ID = "ID";
public static final String COL_NAME ="NAME";
public static final String COL_QTY ="QUANTITY";
public static final String COL_LOCATION ="LOCATION";
public static final String COL_PRICE1 ="PRICE1";
public static final String COL_PRICE2 ="PRICE2";


/*
This constructor creates the database
 */
public DatabaseHelper(Context context) {
    super(context, DATABASE_NAME, null, 1);
    SQLiteDatabase db = this.getWritableDatabase();
}


@Override
public void onCreate(SQLiteDatabase db) {

    db.execSQL("CREATE TABLE " + TABLE_NAME + " (ID INTEGER PRIMARY KEY AUTOINCREMENT,NAME TEXT,QUANTITY TEXT,LOCATION TEXT,PRICE1 TEXT,PRICE2 TEXT)");


}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

    db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
    onCreate(db);
}


public boolean insertData(String name, String qty, String location, String price1, String price2){


    SQLiteDatabase db = this.getWritableDatabase();

    // content value is a row, and we fill it with the put();
    ContentValues contentValues = new ContentValues();
    contentValues.put(COL_NAME, name);
    contentValues.put(COL_QTY, qty);
    contentValues.put(COL_LOCATION, location);
    contentValues.put(COL_PRICE1, price1);
    contentValues.put(COL_PRICE2, price2);


    long result = db.insert(TABLE_NAME, null,contentValues);

    if(result == -1) {
        return false;
    }else{
        return true;
        }
    }


public Cursor getAllData(){

    SQLiteDatabase db = this.getWritableDatabase();
    Cursor cursorResults = db.rawQuery("SELECT * FROM " + TABLE_NAME, null);
    return cursorResults;

}
 public class ShoplistAdapter extends RecyclerView.Adapter<ShoplistAdapter.ViewHolder>{

List<ShopListItem> shopListItems;
public ShoplistAdapter(List<ShopListItem> shopListItems) {
    this.shopListItems = shopListItems;
}


@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

    Context context = parent.getContext();
    LayoutInflater inflater = LayoutInflater.from(context);
    View shoplist_itemView = inflater.inflate(R.layout.shop_list_item, parent, false);
    ViewHolder viewHolder = new ViewHolder(shoplist_itemView);

    return viewHolder;
}

@Override
public void onBindViewHolder(final ViewHolder holder, final int position) {


    holder.location.setText(shopListItems.get(position).location.toString());
    holder.normalPrice.setText(shopListItems.get(position).normalprice.toString());
    holder.offerPrice.setText(shopListItems.get(position).offerprice.toString());

    StringBuilder stringBuilder = new StringBuilder();
    stringBuilder.append(shopListItems.get(position).quantity + "  " + shopListItems.get(position).name);
    holder.productname.setText(stringBuilder);

    if(!shopListItems.get(position).offerprice.toString().isEmpty()){
        holder.normalPrice.setPaintFlags(holder.normalPrice.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);

    }

    if(shopListItems.get(position).normalprice.isEmpty()){
        holder.normalPrice.setVisibility(View.GONE);
    }


    holder.checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {

            if(isChecked == true){
                holder.productname.setPaintFlags(holder.productname.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
                holder.productname.setTextColor(Color.parseColor("#40000000"));
            }else{
                holder.productname.setPaintFlags(0 | Paint.ANTI_ALIAS_FLAG);
                holder.productname.setTextColor(Color.BLACK);
            }
        }
    });
}

@Override
public int getItemCount() {
    return shopListItems.size();
}


public static class ViewHolder extends RecyclerView.ViewHolder{


    private CheckBox checkBox;
    private TextView productname, quantity, location, normalPrice, offerPrice;
    private ImageButton edit_icon, delete_icon;

    public ViewHolder(View itemView) {
        super(itemView);

        productname = (TextView)itemView.findViewById(R.id.product_name);
        location = (TextView)itemView.findViewById(R.id.product_location);
        normalPrice = (TextView)itemView.findViewById(R.id.product_price);
        offerPrice = (TextView)itemView.findViewById(R.id.product_offer_price);
        edit_icon = (ImageButton)itemView.findViewById(R.id.editShopItem_Icon);
        delete_icon = (ImageButton)itemView.findViewById(R.id.shopitem_delete_icon);
        checkBox = (CheckBox) itemView.findViewById(R.id.bought_checkbox);

    }
}

@Override
public void onAttachedToRecyclerView(RecyclerView recyclerView) {
    super.onAttachedToRecyclerView(recyclerView);
}
公共类ShoplistAdapter扩展了RecyclerView.Adapter{
列出购物清单;
公共ShoplistAdapter(列出shopListItems){
this.shopListItems=shopListItems;
}
@凌驾
public ViewHolder onCreateViewHolder(视图组父级,int-viewType){
Context=parent.getContext();
LayoutFlater充气机=LayoutFlater.from(上下文);
查看购物清单\项目视图=充气机。充气(R.layout.shop\列表\项目,父项,false);
ViewHolder ViewHolder=新的ViewHolder(shoplist\u itemView);
返回视图持有者;
}
@凌驾
公共无效onBindViewHolder(最终视图持有人,最终整型位置){
holder.location.setText(shopListItems.get(position.location.toString());
holder.normalPrice.setText(shopListItems.get(position.normalPrice.toString());
holder.offerPrice.setText(shopListItems.get(position.offerPrice.toString());
StringBuilder StringBuilder=新的StringBuilder();
stringBuilder.append(shopListItems.get(position).quantity+“”+shopListItems.get(position).name);
holder.productname.setText(stringBuilder);
if(!shopListItems.get(position).offerprice.toString().isEmpty()){
holder.normalPrice.setPaintFlags(holder.normalPrice.getPaintFlags()| Paint.STRIKE_-THRU_-TEXT_-FLAG);
}
if(shopListItems.get(position).normalprice.isEmpty()){
holder.normalPrice.setVisibility(View.GONE);
}
setOnCheckedChangeListener(newcompoundButton.OnCheckedChangeListener()){
@凌驾
检查更改后的公共无效(复合按钮视图,布尔值已检查){
如果(isChecked==true){
holder.productname.setPaintFlags(holder.productname.getPaintFlags()| Paint.STRIKE_THRU_TEXT_FLAG);
holder.productname.setTextColor(Color.parseColor(#40000000));
}否则{
holder.productname.setPaintFlags(0 | Paint.ANTI_别名_标志);
holder.productname.setTextColor(Color.BLACK);
}
}
});
}
@凌驾
public int getItemCount(){
return shopListItems.size();
}
公共静态类ViewHolder扩展了RecyclerView.ViewHolder{
私有复选框;
私有TextView产品名称、数量、位置、正常价格、报价;
私有图像按钮编辑图标,删除图标;
公共视图持有者(视图项视图){
超级(项目视图);
productname=(TextView)itemView.findViewById(R.id.product\u名称);
location=(TextView)itemView.findViewById(R.id.product\u位置);
normalPrice=(TextView)itemView.findViewById(R.id.product\u price);
offerPrice=(TextView)itemView.findViewById(R.id.product\u offer\u price);
edit_icon=(ImageButton)itemView.findViewById(R.id.editShopItem_icon);
delete_icon=(ImageButton)itemView.findViewById(R.id.shopitem_delete_icon);
checkBox=(checkBox)itemviewbyd(R.id.bunded\u checkBox);
}
}
@凌驾
附加ToRecyclerView(RecyclerView RecyclerView)上的公共无效{
super.onAttachedToRecyclerView(recyclerView);
}

发生这种情况是因为您正在调用ShopListItem对象字段的
toString()
方法:
shopListItems.get(position).location.toString()

相反,为ShopListItem类的字段创建getter方法,例如

public getLocation() {
   return location;
}

只需调用这些函数即可获取数据。

之所以发生这种情况,是因为您正在调用ShopListItem对象字段的
toString()
方法:
shopListItems.get(position).location.toString()

相反,为ShopListItem类的字段创建getter方法,例如

public getLocation() {
   return location;
}

然后调用这些来获取数据。

你能分享适配器的代码吗?@howdothis是的,先生!你刚才做了,因为在onBindViewHolder下,你调用
toString()
来获取文本。默认的
toString()
只返回该对象的表示形式,这不是您想要的。您可以为适配器共享您的代码吗?@howdoothis是的,先生!您这样做是因为在onBindViewHolder下,您正在调用
toString()
以获取文本。默认值为
toString()
只返回该对象的表示形式,这不是您想要的。谢谢!它成功了!!!我在recyclerView中还有一个小问题。也许我可以发布一个新问题(这样您就可以得到分数)你可以回答吗?这是关于让它立即显示添加的数据。现在我必须重新启动应用程序以显示新数据。你是否尝试调用
notifyDataSetChaned()
在适配器上?是的!我刚刚就这个问题向她提出了一个新问题。看一看:哦,谢谢你!它成功了!!!我在recyclerView上还有一个小问题。也许我可以发布一个新问题(这样你就可以得到分数)你可以回答吗?这是关于让它立即显示添加的数据。现在我必须重新启动应用程序以显示新数据。你是否尝试在适配器上调用
notifyDataSetChaned()
?是的!我刚刚为这个问题问了一个新问题。请看: