0

私がやっていることは、(Firebaseを使用して)Androidアプリケーションに通知を送信するときにSQLiteテーブルに通知メッセージを保存して、ユーザーがListViewで通知を確認できるようにすることです。SQLiteにすべてのデータが保存されていない

問題は、アプリケーションがフォアグラウンドにあるときだけ通知テキストを保存することです。そうでないと、電話は通知を受信しますが、保存しません。名前のクラスで

私のデータベース作成:DBController

public DBContoller(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) { 
    super(context, "cloudmessaging.db", factory, version); 
} 

@Override 
public void onCreate(SQLiteDatabase db) { 
    db.execSQL("CREATE TABLE Messages(MSG TEXT,created_at DATETIME DEFAULT CURRENT_TIMESTAMP);"); 
} 

@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
    db.execSQL("DROP TABLE IF EXISTS Messages"); 
} 
ContentValues cv; 
//add 
public void add(String MSG){ 
    cv=new ContentValues(); 
    cv.put("MSG",MSG); 
    this.getWritableDatabase().insertOrThrow("Messages", "", cv); 
} 
public void selectAll(List lst){ 
    Cursor cursor= this.getReadableDatabase().rawQuery("SELECT * FROM Messages order by created_at DESC ",null); 
    lst.clear(); 
    while(cursor.moveToNext()){ 
     lst.add("Message : "+cursor.getString(0)+" - ["+cursor.getString(1)+" ]"); 
    } 
} 

私は通知メッセージ保存方法:

NotificationCompat.Builder notifBuilder=new NotificationCompat.Builder(getApplicationContext()) 
      .setSmallIcon(R.mipmap.ic_launcher) 
      .setContentTitle("Gi2017 :)") 
      .setContentText(body) 
      .setAutoCancel(true) 
      .setSound(notifsound) 
      .setContentIntent(pendingintent); 

    NotificationManager notifManager=(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); 
    notifManager.notify(0/*notification ID*/,notifBuilder.build()); 

    try{ 
     DBContoller db=new DBContoller(getApplicationContext(),"",null,1); 
     db.add(body); 
    }catch(Exception e){Log.d("error DB",e.getMessage());} 

私が保存されたショーどのメッセージ:

DBContoller db; 
ListView lstAfficher; 
db=new DBContoller(getApplicationContext(),"",null,1); 
    lstAfficher = (ListView) findViewById(R.id.listView); 
    List<String> lst = new ArrayList<String>(); 
    db.selectAll(lst); 
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(getApplicationContext(),R.layout.listlayout,lst); 
    lstAfficher.setAdapter(adapter); 
+0

「エラーDB」というログカテーテルメッセージが表示されますか? – Karakuri

+0

送信しているサンプルのペイロードを投稿できますか? :) –

+0

@Karakuri no errors – CrazyDeveloper

答えて

0

あなたが最も可能性が高いですが通知メッセージを送信する。

使用通知メッセージを使用すると、FCMは、あなたのクライアントアプリケーションの代わりに通知を表示する処理したいとき:documentation for Firebase Cloud Messagingが言うように、あなたはアプリがバックグラウンドにされているときに、通知メッセージは、システムによって処理されます。クライアントアプリケーションでメッセージを処理する場合は、データメッセージを使用します。

アプリコードでメッセージを受け取る場合は、data messageを送信する必要があります。

+0

ご支援いただきありがとうございます。データの処理を試みましたが、アプリが死んだりバックグラウンドでも通知は正常に到着しましたが、メソッド(画面上のonMessageReceived())のデータはアプリが画面上にある場合にのみ保存されました。 – CrazyDeveloper

0
You can create table like this. 


final String NOTIFICATION_SAVE = "CREATE TABLE " + NOTIFICATION_GROUPING + "(" + ROW_ID + " INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL UNIQUE," + FEED_ID + " TEXT," + MESSAGE + " TEXT," + ACTION + " TEXT)"; 
     db.execSQL(NOTIFICATION_SAVE); 


    And store data into created table like this. 

SQLiteDatabase db = this.getWritableDatabase(); 
     ContentValues cv = new ContentValues(); 
     cv.put(FEED_ID , "102"); 
     cv.put(MESSAGE, "notification"); 
     db.insert(NOTIFICATION_GROUPING, null, cv); 
     db.close(); 
関連する問題