2015-06-08 3 views
0

Я пытаюсь получить содержимое уведомлений и автоматически сохранить его в базе данных, как только уведомление будет выпущено на parse.com, данные должны быть сохранены в базе данных, будет ли пользователь нажимать на просмотр уведомление или нет.Вставить данные из parse в базу данных sqllite

Это то, что я пробовал до сих пор, но все еще не работает. Он сохраняет содержимое только в базе данных, когда пользователь нажимает на уведомление.

Application.java

public class Application extends android.app.Application{ 
    public Application() { 
    } 

    @SuppressWarnings("deprecation") 
    public void onCreate() { 
    super.onCreate(); 
     // Initialize the Parse SDK. 
    Parse.initialize(this, "YwWVJ1IdukAXQx6WqksoRlA94k1OoJ6cHqdgsInHaTN", "fCh5pWNiSaHaFtuACufgs9va6wq31pte8nuaiCAG6Nb"); 

    // Specify an Activity to handle all pushes by default. 
    PushService.setDefaultPushCallback(this, Notification.class); 
    }   
} 

FireBackground.java

public class FireBackground extends ParsePushBroadcastReceiver { 
    @Override 
    public void onPushOpen(Context context, Intent intent) { 
     Intent i = new Intent(context, Notification.class); 
     i.putExtras(intent.getExtras()); 
     i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     context.startActivity(i); 
    } 
} 

Notification.java

public class Notification extends ListActivity { 

    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     ParseAnalytics.trackAppOpened(getIntent()); 
     Intent intent = getIntent(); 
     Bundle extras = intent.getExtras(); 
     String message=""; 

     SQLiteDatabase db; 

      db = openOrCreateDatabase(
       "notification.db" 
       , SQLiteDatabase.CREATE_IF_NECESSARY 
       , null 
       ); 

      //CREATE TABLES AND INSERT MESSAGES INTO THE TABLES 
      String CREATE_TABLE_NOTICES = "CREATE TABLE IF NOT EXISTS notices (" 
        + "ID INTEGER primary key AUTOINCREMENT," 
        + "NOTIFICATIONS TEXT)"; 
      db.execSQL(CREATE_TABLE_NOTICES); 

     if(extras !=null){ 
      String jsonData = extras.getString("com.parse.Data"); 
      try{ 
       JSONObject notification = new JSONObject(jsonData); 
       message = notification.getString("alert"); 

        String sql = 
         "INSERT or replace INTO notices (NOTIFICATIONS) " 
         + "VALUES('" + message + "')";  
        db.execSQL(sql);  

      } 
      catch(JSONException e){ 
       Toast.makeText(getApplicationContext(), "Something went wrong with the notification", Toast.LENGTH_SHORT).show(); 
      } 
     }  
} 

андроида файл манифеста

<application 
android:name="com.parse.starter.Application" 
    android:allowBackup="true" 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/AppBaseTheme" > 
    <activity 
     android:name="com.parse.starter.Notification" 
     android:label="@string/app_name" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 

    <service android:name="com.parse.PushService" /> 

    <receiver android:name=".HomeActivity" 
    android:exported="false" > 
     <intent-filter> 
     <action android:name="com.parse.push.intent.RECEIVE" /> 
     <action android:name="com.parse.push.intent.DELETE" /> 
     <action android:name="com.parse.push.intent.OPEN" /> 
    </intent-filter> 
    </receiver> 

    <receiver android:name="com.parse.ParseBroadcastReceiver"> 
     <intent-filter> 
      <action android:name="android.intent.action.BOOT_COMPLETED" /> 
      <action android:name="android.intent.action.USER_PRESENT" /> 
     </intent-filter> 
    </receiver> 
    <receiver android:name="com.parse.GcmBroadcastReceiver" 
     android:permission="com.google.android.c2dm.permission.SEND"> 
     <intent-filter> 
      <action android:name="com.google.android.c2dm.intent.RECEIVE" /> 
      <action android:name="com.google.android.c2dm.intent.REGISTRATION" /> 

      <!-- 
       IMPORTANT: If you change the package name of this sample app, 
       change "com.parse.starter" in the lines 
       below to match the new package name. 
      --> 
      <category android:name="com.parse.starter" /> 
     </intent-filter> 
    </receiver> 

Я был бы признателен, если бы кто-нибудь дал мне право использовать правильный метод. Спасибо

+0

«Я пытаюсь получить содержимое уведомлений и автоматически хранить его в базе данных», а затем вы говорите, что он уже был решен ». Он сохраняет содержимое только в базе данных, когда пользователь нажимает по уведомлению ". Какова ясная проблема и вопрос? – deadfish

+0

Я думаю, вы не получите меня. Вышеупомянутые коды могут сохранять содержимое уведомлений в базе данных только тогда, когда пользователь нажимает на значок уведомления из своего интерфейса телефона. Однако, если пользователь обращается к приложению, не нажимая на значок уведомлений со своего фона, содержимое wld не сохраняется в локальной базе данных. – George

+0

@deadfish, пожалуйста, я очищаю свою проблему сейчас? – George

ответ

1

Ваш код для сохранения данных извещения в вашей локальной базе данных работает в Управлении. И действие запускается при открытии уведомления, отсюда и название onPushOpen. Следовательно, переместим код, который сохраняет в базе данных для FireBackground в методе, как onPushRecieved(...)

1

Вы должны переопределить onPushReceive метод в BroadcastReceiver и чем получить необходимые данные от намерения. Вот мой пример с retreiving jsonData:

@Override 
protected void onPushReceive(Context context, Intent intent) { 
    Bundle extras = intent.getExtras(); 

    String jsonData = extras.getString("com.parse.Data"); 
    DBServiceFlow.save(intent); 
    } catch (JSONException | ParseException e) { 
     Log.e(TAG, "", e); 
    } 
} 

Тогда вы могли бы реализовать свою собственную службу с фоновым потоком, чтобы сохранить данные. Например, вы могли бы просто использовать IntentService

public class DBService extends IntentService { 

@Override 
public void onHandleIntent(Intent intent) { 
    if (intent.getAction() == "com.tac.save_notification") { 
     //parse your json here... 
     DBHelper.save(...); 
    } 
} 
} 

PS: никогда не работать с БД в основном потоке. (как вы показываете в своем уведомлении)

+0

Здравствуйте, пожалуйста, я действительно не понимаю, что вы сделали. Не могли бы вы объяснить немного дальше. Спасибо – George

+1

DBHelper - статический класс BD-слоя DAO. Служба DBService - намерения, которая является репитером для запросов на апробирование БД. будет обрабатывать запросы в фоновом потоке. DBServiceFlow - статический класс, который поможет вам составить намерения и вызвать службу. – TAC

+0

Должны ли данные сохраняться через класс DBService? где вы храните данные в базе данных? – George

Смежные вопросы