2016-04-17 7 views
0

私はAndroidアプリを開発中です。私のアプリケーションでは、私はアプリケーションが閉じられたときにデータベースからデータを削除しています。だから、私は放送受信機onDestroyを開き、受信機の中のデータを削除する。私はActivity内でデータベースヘルパーのdeleteメソッドを呼び出すと動作しています。しかし、私は受信機の中でそれを呼び出すとき、それは動作していません。データベースからのデータを削除して、Androidのブロードキャスト受信機で動作しない

これは私の受信機である:

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

    } } 

これは、データベースヘルパーのdeleteメソッドです:

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

これは私が私の活動のonDestroyイベントにデータを削除する方法です:

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

しかし、データは削除されません。それはエラーをスローしていません。アクティビティ内で削除するとき。削除メソッドが機能しています。どうすれば修正できますか?

答えて

1

あなたはonReceive()内で何もしていない、あなたがrefreshData()を呼び出す必要があります:

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

または直接deleteCategories()メソッドを呼び出す:あなたが受信機でrefreshData()を定義する必要がいけない第2のケースで

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

をクラス

+0

しかし、私は受信機を開いたときどのように活動のコンテキストを渡すことができますか? –

+1

これはうまくいきません。 OPは実際には 'BroadcastReceiver'クラスとして' BroadcastReceiver'を使用していません。つまり、実際には放送されていません。彼らは何も拡張していない普通の古いクラスで、今やっていることを正確に行うことができます。 –

+0

@MikeM。 OPは受信者のインスタンスを作成します。 – Yazan