2016-10-03 92 views
1

我想知道如何在數據庫中更改數據時通知我。
有沒有解決這個問題?
事實是我知道如何推送並獲取數據,但我不知道如何在修改發生時得到通知當數據庫中的數據更改時收到通知

+0

它可以使用廣播接收器完成! –

+0

我使用的是由php腳本鏈接的mysql數據庫,因此我不知道我是否可以使用廣播接收器 –

回答

1

如果更改數據庫中數據的責任是您的應用程序,則應該創建一個數據庫層,然後創建一些回調以通知您的應用程序數據具有插入,更新或刪除操作。

如果你使用SQLite像本地數據庫:

第一種方法,使用Android SDK的內容提供商,內容觀察者類。創建一個監視本地sqlite中某個表的內容觀察器。

http://www.grokkingandroid.com/use-contentobserver-to-listen-to-changes/

如果使用ORM,也有在ORM回調更改通知。例如GreenDao使用AsyncSession:

AsyncSession asyncSession = App.getInstance().daoSession.startAsyncSession(); 
asyncSession.setListener(new AsyncOperationListener() { 
    @Override 
    public void onAsyncOperationCompleted(AsyncOperation operation) { 
     // do whats needed 
    } 
}); 

asyncSession.insert(MyObject); 

如果使用Realm.IO,有來自境界交易回調,通知被更新完成。

Realm realm = Realm.getDefaultInstance(); 
realm.executeTransaction(new Realm.Transaction() { 
     @Override 
     public void execute(Realm realm) { 
      MyObject myobject = new MyObject(); 
      myobject.setId(UUID.randomUUID().toString()); 
      myobject.setName("My object name test"); 
      realm.copyToRealm(myobject); 
     } 
    }, new Realm.Transaction.Callback() { 
     @Override 
     public void onSuccess() { 
      //realm already update 
      Log.e("lh", "this callback i can use to notify. after save " + realm.allObjects(MyObject.class).size()); 
      realm.close(); 
     } 
    }); 

在後端的長度。

如果更改在後端。一個可能的解決方案是發送推送通知並開始在應用程序中執行後臺服務。

在這個URL中,你有一個PHP腳本來執行推送通知到谷歌雲。

https://gist.github.com/prime31/5675017

您必須附上谷歌雲推送通知接收器在你的Android應用,並創建一個特定的服務,將做一個HTTP請求,如果你有一個REST端點暴露你的數據庫下載新的數據。

+0

這是一個外部應用程序,它將更新數據,因此我不知道我是否使用了您的想法? –

+0

你說數據在你的後端,並且是mysql,所以服務器應該在應用程序後臺端顯示應用程序。我附上一個解決方案。 –

0

最簡單的方法是在數據庫中保留一行並在數據更改時更新其值。

相關問題