Android clear listview链接到SQLite

Android clear listview链接到SQLite,android,sqlite,listview,android-listview,custom-adapter,Android,Sqlite,Listview,Android Listview,Custom Adapter,我有以下活动从SQLite填充listview。 单击empty时,我会正确删除表内容并刷新显示为空的CartActivity。 如果我在购物车中添加新元素,那么旧元素会再次出现,但只会出现在listview中,而(正确地)不会出现在我的db中。如果我关闭应用程序,listview会正确地自我更新 尝试查看类似的问题,尝试了notify,但什么也没发生。有人写道“你删除了数据,但没有删除条目”,但我不能 我怎样才能解决这个问题 任何帮助都将不胜感激。提前谢谢 public class CartA

我有以下活动从SQLite填充listview。 单击
empty
时,我会正确删除表内容并刷新显示为空的CartActivity。 如果我在购物车中添加新元素,那么旧元素会再次出现,但只会出现在listview中,而(正确地)不会出现在我的db中。如果我关闭应用程序,listview会正确地自我更新

尝试查看类似的问题,尝试了
notify
,但什么也没发生。有人写道“你删除了数据,但没有删除条目”,但我不能

我怎样才能解决这个问题

任何帮助都将不胜感激。提前谢谢

public class CartActivity extends Activity {
ListView list;
Context context;
SessionManagement session;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_cart);
    Typeface font = Typeface.createFromAsset(this.getAssets(), "font/VarelaRound-Regular.ttf");
    context = getApplicationContext();
    session = new SessionManagement(context);
    final CartHandler db = new CartHandler(this);
    Log.d("Reading: ", "Reading all contacts..");
    final List<CartRow> products = db.getAllProducts();

    for (CartRow cn : products) {
        String log = "Id: "+cn.getID()+" ,Name: " + cn.getName() + " ,Number: " + cn.getNumber() + " ,Pieces: " + cn.getPieces() + " ,Price: " + cn.getPrice() + " ,Tot: " + cn.getTotPrice();
        Log.d("Nome: ", log);
    }
    if(products.isEmpty() ){
    //Intent intent = new Intent(getApplicationContext(),MenuActivity.class);
        //intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        //intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
        //startActivity(intent);
        Toast.makeText(this, "", Toast.LENGTH_LONG).show();
        //finish();
    } else {
        final CartHandler mdb = new CartHandler(this);
        getItemsFromDatabase(mdb);
        final CustomCarterList adapter = new CustomCarterList(CartActivity.this);
        list = (ListView) findViewById(R.id.cart);
        list.setAdapter(adapter);
        Button empty = (Button) findViewById(R.id.emptycart);
        empty.setTypeface(font);
        empty.setOnClickListener(new View.OnClickListener(){
            public void onClick(View v){
                db.deleteAll();
                //mdb.deleteAll();
                Intent intent = new Intent(CartActivity.this, CartActivity.class);
                intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                startActivity(intent);
                finish();
            }
        });
        Button proceed = (Button) findViewById(R.id.proceed);
        proceed.setTypeface(font);
        proceed.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                if (!session.isLoggedIn()) {
                    Intent intent = new Intent(CartActivity.this, LoginActivity.class);
                    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                    startActivity(intent);
                    finish();
                } else {
                    Intent intent = new Intent(
                            getApplicationContext(),
                            CheckoutActivity.class
                    );
                    startActivity(intent);
                }
            }
        });

    }

}

    public void getItemsFromDatabase(CartHandler mdb) {
        Cursor cursor = null;
        try{
            SQLiteDatabase db =mdb.getReadableDatabase();
            cursor=db.rawQuery("select * from products", null);
            while (cursor.moveToNext()){
                Log.e("Cart", cursor.getString(1)+":"+cursor.getString(2)+":"+cursor.getString(3)+":"+cursor.getString(4)+":"+cursor.getString(5));
                CartRow.itemIdList.add(cursor.getString(0));
                CartRow.itemNameList.add(cursor.getString(1));
                CartRow.itemQuantityList.add(cursor.getString(2));
                if (cursor.getString(3).equals("0")){
                    CartRow.itemPiecesList.add("Pieces: 1");}
                else{
                CartRow.itemPiecesList.add("Pieces: "+cursor.getString(3));}
                CartRow.itemPriceList.add(cursor.getString(4) + ".00€");
                CartRow.itemTotPriceList.add(cursor.getString(5)+".00€");
            }
            cursor.close();
        }catch (SQLException e){
            Log.e("DB Error", e.toString());
            e.printStackTrace();
        }
    }
公共类活动扩展活动{
列表视图列表;
语境;
会议管理会议;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u cart);
Typeface font=Typeface.createFromAsset(this.getAssets(),“font/VarelaRound Regular.ttf”);
context=getApplicationContext();
会话=新会话管理(上下文);
最终CartHandler db=新CartHandler(此);
日志d(“读取:”,“读取所有联系人…”);
最终产品列表=db.getAllProducts();
对于(卡特罗中国:产品){
字符串log=“Id:”+cn.getID()+”,名称:“+cn.getName()+”,编号:“+cn.getNumber()+”,片段:“+cn.getPieces()+”,价格:“+cn.getPrice()+”,Tot:“+cn.GetToPrice()”;
Log.d(“Nome:,Log”);
}
if(products.isEmpty()){
//Intent Intent=新的Intent(getApplicationContext(),MenuActivity.class);
//intent.setFlags(intent.FLAG\u ACTIVITY\u CLEAR\u TOP);
//intent.setFlags(intent.FLAG\u活动\u清除\u任务);
//星触觉(意向);
Toast.makeText(this,“,Toast.LENGTH_LONG).show();
//完成();
}否则{
最终CartHandler mdb=新CartHandler(此);
getItemsFromDatabase(mdb);
最终CustomCarterList适配器=新CustomCarterList(CartActivity.this);
list=(ListView)findViewById(R.id.cart);
list.setAdapter(适配器);
按钮空=(按钮)findViewById(R.id.emptycart);
空。设置字体(字体);
empty.setOnClickListener(新视图.OnClickListener(){
公共void onClick(视图v){
db.deleteAll();
//mdb.deleteAll();
意向意向=新意向(CartActivity.this、CartActivity.class);
intent.setFlags(intent.FLAG\u ACTIVITY\u CLEAR\u TOP);
星触觉(意向);
完成();
}
});
按钮继续=(按钮)findViewById(R.id.procedue);
继续。设置字体(字体);
继续.setOnClickListener(新视图.OnClickListener(){
公共void onClick(视图v){
如果(!session.isLoggedIn()){
意向意向=新意向(CartActivity.this、LoginActivity.class);
intent.setFlags(intent.FLAG\u ACTIVITY\u CLEAR\u TOP);
星触觉(意向);
完成();
}否则{
意图=新意图(
getApplicationContext(),
CheckoutActivity.class
);
星触觉(意向);
}
}
});
}
}
public void getItemsFromDatabase(CartHandler mdb){
游标=空;
试一试{
SQLiteDatabase db=mdb.getReadableDatabase();
cursor=db.rawQuery(“从产品中选择*项”,空);
while(cursor.moveToNext()){
Log.e(“Cart”,cursor.getString(1)+:“+cursor.getString(2)+:“+cursor.getString(3)+:“+cursor.getString(4)+:“+cursor.getString(5));
CartRow.itemIdList.add(cursor.getString(0));
添加(cursor.getString(1));
CartRow.itemQuantityList.add(cursor.getString(2));
if(cursor.getString(3).equals(“0”)){
CartRow.itempecesslist.add(“片段:1”);}
否则{
CartRow.itempecesslist.add(“片段:+cursor.getString(3));}
CartRow.itemPriceList.add(cursor.getString(4)+.00欧元);
CartRow.itemTotPriceList.add(cursor.getString(5)+.00欧元);
}
cursor.close();
}捕获(SQLE异常){
Log.e(“DB Error”,e.toString());
e、 printStackTrace();
}
}

使用
适配器。notifyDataSetChanged()
而不是notify。

像这样更改onCreate方法的else部分

if(products.isEmpty() ){
    //Intent intent = new Intent(getApplicationContext(),MenuActivity.class);
        //intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        //intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
        //startActivity(intent);
        Toast.makeText(this, "", Toast.LENGTH_LONG).show();
        //finish();
    } else {
        final CartHandler mdb = new CartHandler(this);
        getItemsFromDatabase(mdb);
        final CustomCarterList adapter = new CustomCarterList(CartActivity.this);
        list = (ListView) findViewById(R.id.cart);
        list.setAdapter(adapter);
        Button empty = (Button) findViewById(R.id.emptycart);
        empty.setTypeface(font);
        empty.setOnClickListener(new View.OnClickListener(){
            public void onClick(View v){
                db.deleteAll();
                CartRow.itemIdList.clear();   // clears the list
                adapter.notifyDataSetChanged();  // notifies adapter about the change.
                //mdb.deleteAll();
                Intent intent = new Intent(CartActivity.this, CartActivity.class);
                intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                startActivity(intent);
                finish();
            }
        });
        Button proceed = (Button) findViewById(R.id.proceed);
        proceed.setTypeface(font);
        proceed.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                if (!session.isLoggedIn()) {
                    Intent intent = new Intent(CartActivity.this, LoginActivity.class);
                    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                    startActivity(intent);
                    finish();
                } else {
                    Intent intent = new Intent(
                            getApplicationContext(),
                            CheckoutActivity.class
                    );
                    startActivity(intent);
                }
            }
        });

    }
已解决: 召唤

以前

getItemsFromDatabase(mdb);
之后

db.deleteAll();

您正在引用购物车处理程序两次,一次使用“db”,第二次使用“mdb”,请尝试在活动中引用它一次,然后对其进行处理。尝试引用它一次,然后调用适配器。notifyDataSetChanged()但是没有什么我认为你应该在你的适配器中尝试CursorAdapter,当我需要连接列表视图和来自SQLTested的数据时,我喜欢它们,但是如果可能的话,也可以更改适配器的构造函数(CustomCarterList)并从活动中传递数据列表,而不是从CartRow.ItemIdleist获取数据;我想我做不到这一点,列表是dinamic,两个活动之间没有链接。尝试了您的代码,现在:1-清空购物车2-我添加产品\u x->购物车正确填充3-更改活动,重新打开购物车活动->我购物车中的两行(但不在我的db中:product_x\n product_x 4-我删除我的购物车和我的db 5-插入新产品'product_y'6-重新打开购物车:我看到了product_x 7-重新打开:我看到了product_x\n product_x 8-重新打开:我看到了product_x\n product_x\n
db.deleteAll();