2016-04-17 5 views
0

Ich entwickle eine Android-App. In meiner App lösche ich Daten aus der Datenbank, wenn die App geschlossen wird. Also öffne ich den Broadcast-Empfänger onDestroy und lösche die Daten im Empfänger. Wenn ich delete-Methode des Datenbankhilfeprogramms in Activity aufruft, funktioniert es. Aber wenn ich es im Empfänger anrufe, funktioniert es nicht.Löschen von Daten aus der Datenbank funktioniert nicht in Broadcast-Empfänger in Android

Das ist mein Empfänger:

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(); 

    } } 

Dies ist Löschmethode der Datenbank Helfer:

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

Dies ist, wie ich Daten in dem onDestroy Ereignisse meiner Tätigkeit löschen:

@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)); 
    } 

Aber Daten werden nicht gelöscht. Es wirft auch keinen Fehler. Wenn ich innerhalb der Aktivität lösche. Löschen-Methode funktioniert. Wie kann ich es reparieren?

Antwort

1

Sie nichts innerhalb onReceive() tun, müssen Sie refreshData() nennen: direkt

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

oder rufen deleteCategories() Methode:

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

in zweiten Fall brauchen Sie nicht den Empfänger definieren refreshData() in Klasse

+0

Aber wie kann ich den Kontext der Aktivität übergeben, wenn ich den Empfänger öffne? –

+1

Dies wird nicht funktionieren. Die OP verwendet ihre "BroadcastReceiver" -Klasse nicht tatsächlich als einen "BroadcastReceiver". Das heißt, sie senden nicht wirklich zu ihm. Sie könnten genau das tun, was sie jetzt tun, mit einer einfachen alten Klasse, die nichts erweitert. –

+0

@MikeM. opps, hat gerade bemerkt, dass OP Instanz des Empfängers – Yazan

Verwandte Themen