2012-05-11 16 views
4

私はhdがC2DM機能を持つプロジェクトを開発しました。サーバーで利用可能なデータがある場合はいつでも。サーバーは、このアプリケーションを持っているすべてのデバイスにデータをプッシュします(私の場合は小さなメッセージです)。Sqliteデータベースは一度だけ作成する必要があります

は今、私の質問は、メッセージが出番データベースとテーブルを作成することでしょうたびに、ここ は私のコードではないされ、

public class MessageHelper extends Activity 
    { 
     public String str; 
     public int sts; 
     public Date timeStamp; 

     protected void onCreate(Bundle savedInstanceState) 
     { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.main); 

      Bundle extras = getIntent().getExtras(); 
      if (extras != null) { 
       this.str = extras.getString("msgg"); 
       Log.d("C2DM", this.str); 
      } 

      // Create a ref of SQLite 
      SQLiteDatabase db; 

      //use tat ref to open or create a table 
      db = openOrCreateDatabase("/data/data/de.vogella.android.c2dm.simpleclient/app_database/file__0/0000000000000001.db", SQLiteDatabase.CREATE_IF_NECESSARY, null); 

      try 
      { 
       //initialsiging a query with all the table fields 
       final String CREATE_TABLE_CONTAIN = "CREATE TABLE IF NOT EXISTS tbl_Message4(" 
         + "id INTEGER PRIMARY KEY AUTOINCREMENT," 
         + "msg TEXT not null," 
         + "msg_time INTEGER not null," 
         + "msg_status INTEGER not null);"; 

       //execute the above query 
       db.execSQL(CREATE_TABLE_CONTAIN); 

       timeStamp = new Date(); 

       String sql = 
         "INSERT or replace INTO tbl_Message4 (msg,msg_time,msg_status) VALUES('"+this.str+"' ,'"+this.timeStamp+"' , 0)" ;  
       db.execSQL(sql); 
     } 
    } 

また、私はBroadcastreceiverを拡張MessageReceiverというクラスを持っている。eveytimeメッセージが来ますクラスは、これにより、次にMessageReceiverためのコードはここにMessageHelper.class をロードする実行されます

public class C2DMMessageReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     String action = intent.getAction(); 
     Log.w("C2DM", "Message Receiver called"); 
     if ("com.google.android.c2dm.intent.RECEIVE".equals(action)) { 
      Log.w("C2DM", "Received message"); 
      final String payload = intent.getStringExtra("payload"); 
      Log.d("C2DM", "dmControl: payload = " + payload); 
      // TODO Send this to my application server to get the real data 
      // Lets make something visible to show that we received the message 
      createNotification(context, payload); 

     } 
    } 

    public void createNotification(Context context, String payload) { 
     NotificationManager notificationManager = (NotificationManager) context 
       .getSystemService(Context.NOTIFICATION_SERVICE); 
     Notification notification = new Notification(R.drawable.ic_launcher, 
       "Message received", System.currentTimeMillis()); 
     // Hide the notification after its selected 
     notification.flags |= Notification.FLAG_AUTO_CANCEL; 

     //Intent intent = new Intent(context, MessageReceivedActivity.class); 
     //intent.putExtra("payload", payload); 

     Intent intent = new Intent(context, MessageHelper.class); 
     intent.putExtra("msgg", payload); 
     intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     context.startActivity(intent); 
     //PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0); 
     //notification.setLatestEventInfo(context, "Message", "New message received", pendingIntent); 
     //notificationManager.notify(0, notification); 

    } 

} 

何私はアプリがあるときに、データベースを作成する必要がありますさを探していますはじめてインストールされました。その名前が変更されていないので、事前に

おかげで、

TheIlleterate

+1

http://www.vogella.com/articles/AndroidSQLite/article.html#databasetutorialの 'SQLiteOpenHelper'を参照してください。必要なときにのみデータベースを作成します。 – zapl

答えて

2

は、データベースが一度だけ作成されます。そして、あなたのアプリがアクティビティMessageHelperをはじめて開始する時に作成されます。

0

それは簡単にするためにも、このコードを選ぶことができます。 これは1回だけ作成されます。 このテーブルをどこか別の場所から削除しますか?

関連する問題