recyclerView dosn' t显示真实的'我列表项的数据

时间:2016-03-06 20:54:03

标签: android sqlite

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

enter image description here

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

这是DialogFragment类,用户应在其中写下他们的信息:

import multiprocessing
import time
import sys
import os
import traceback

def the_real_work_done_here(sleep_time):
    try:
        print(os.getpid(), 'start work')
        time.sleep(sleep_time)
        print(os.getpid(), 'end work')
        exit(0)
    except Exception:
        traceback.print_exc()
        exit(2)

def monitor(sleep_time):
    while 1:
        proc = multiprocessing.Process(target=the_real_work_done_here,
            args=(sleep_time,))
        proc.start()
        proc.join()
        if proc.exitcode != 0:
            print('something went wrong... terminating')
            exit(proc.exitcode)


if __name__ == '__main__':
    try:
        sleep_time = int(sys.argv[1])
        monitor(sleep_time)
    except (KeyError, ValueError):
        print('usage: test.py sleeptime')
        exit(1)

这是我创建recylerview,适配器和数据库的mainActivity类:

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", ""));
}

我的recyclerView适配器类:

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;

}

1 个答案:

答案 0 :(得分:0)

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

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

public getLocation() {
   return location;
}

然后调用它们来获取数据。