Search code examples
androidandroid-broadcastreceiver

Delete data from database not working in broadcast receiver in Android


I am developing an Android app. In my app, I am deleting data from database when app is closed. So I open broadcast receiver onDestroy and delete data inside receiver. When I call delete method of database helper inside Activity, it is working. But when I call it inside receiver, it is not working.

This is my receiver:

public class InspectDataReceiver extends BroadcastReceiver {

    private DatabaseHelper dbHelper;

    @Override
    public void onReceive(final Context context, Intent intent) {

    }

    public void refreshData(final Context context,String type)
    {
        dbHelper = new DatabaseHelper(context);
        dbHelper.deleteCategories();

    } }

This is delete method of database helper:

public void deleteCategories()
    {
        db = getWritableDatabase();
        db.delete(CATEGORY_TABLE,null,null);
        db.close();
    }

This is how I delete data in the onDestroy event of my activity:

@Override
    protected void onDestroy() {
        super.onDestroy();
        updateCacheData();
    }

    private void updateCacheData()
    {
        InspectDataReceiver receiver = new InspectDataReceiver();
        receiver.refreshData(getBaseContext(),getResources().getString(R.string.data_receiver_type_category));
    }

But data are not deleted.It is not throwing error as well. When I delete within activity. Delete method is working. How can I fix it?


Solution

  • you are not doing anything inside onReceive(), you need to call refreshData():

    @Override
    public void onReceive(final Context context, Intent intent) {
        refreshData(context);
    }
    

    or call deleteCategories() method directly:

    @Override
    public void onReceive(final Context context, Intent intent) {
        dbHelper = new DatabaseHelper(context);
        dbHelper.deleteCategories();
    }
    

    in second case you dont need to define refreshData() in the receiver class