2016-04-10 18 views
0

Ben de MainActivity ben buAndroid Kullanım veritabanı

DatabaseHelper TouliosDB=new DatabaseHelper(this); 

ve üstü

TouliosDB = new DatabaseHelper(this); 

Sonra sahip bir sınıf var SQLiteOpenHelper uzanan bir veritabanı yardımcısı kullanan bir kod var tha, BroadcastReceiver'u genişletiyor ve alınan sms verilerine dayanarak verileri içe aktarmaya ayarlıyorum. Kod, okuma sms kadar doğru çalışıyor ve verileri alıyor.

Sorunum, veritabanını MainActivity'dan BroadcastReceiver'a nasıl kullanacağımı bilmiyorum.

Bu

BroadcastReceiver sınıf i

public class IncomingSMSReceiver BroadcastReceiver {

private static final String SMS_RECEIVED ="android.provider.Telephony.SMS_RECEIVED"; 

@Override 
public void onReceive(Context _context, Intent _intent) { 

    if (_intent.getAction().equals(SMS_RECEIVED)) { 
     Bundle bundle = _intent.getExtras(); 
     if (bundle != null) { 

      Object[] pdus = (Object[]) bundle.get("pdus"); 

      SmsMessage[] messages = new SmsMessage[pdus.length]; 
      for (int i = 0; i < pdus.length; i++) 
       messages[i] = SmsMessage 
         .createFromPdu((byte[]) pdus[i]); 
      for (SmsMessage message : messages) { 
       String strPhoneNo = message.getOriginatingAddress(); 
       String msg = message.getMessageBody(); 
       if (msg.startsWith("02")) 
       { 
        Toast.makeText(_context, "Whats up!!", Toast.LENGTH_LONG).show(); 
       } 
       if (msg.startsWith("01")){ 
        try { 
         final String[] temaxismeno_sms = msg.split(":"); 
         //eisagoghfititi(String am,String onoma,String epitheto,String examino) 
         // temaxismeno_sms[0] einai o kodikos eisagoghs apo to menu 
         //boolean perastike = myDb.eisagoghfititi(temaxismeno_sms[1],temaxismeno_sms[2],temaxismeno_sms[3],temaxismeno_sms[4]); 
         //if (perastike=true){ 
         //else 
         //{ 
         // Toast.makeText(_context, "H eisagwgh apetixe", Toast.LENGTH_LONG).show(); 
          class MyBroadcast extends BroadcastReceiver { 
          @Override 
          public void onReceive(final Context context, Intent intent) { 
           HandlerThread handlerThread = new HandlerThread("database_helper"); 
           handlerThread.start(); 
           Handler handler = new Handler(handlerThread.getLooper()); 
           handler.post(new Runnable() { 
            @Override 
            public void run() { 
             DatabaseHelper TouliosDB = new DatabaseHelper(context); 
             TouliosDB.eisagoghfititi(temaxismeno_sms[1],temaxismeno_sms[2],temaxismeno_sms[3],temaxismeno_sms[4]); 
             // have more database operation here 
            } 
           }); 
          } 
         } 
         Toast.makeText(_context, "Egine eisagwgh fititi!!", Toast.LENGTH_LONG).show(); 
         String message1 = "H Eisagwgh egine sthn vash.";// minima pou tha stalthei 
         SmsManager sms = SmsManager.getDefault(); 
         sms.sendTextMessage(strPhoneNo, null, message1, null, null); 
         Toast.makeText(_context, "O fititis idopiithike", Toast.LENGTH_LONG).show(); 
         } 
        catch (Exception e) 
         { 
         Toast.makeText(_context, "SMS failed, please try again.", 
           Toast.LENGTH_LONG).show(); 
         e.printStackTrace(); 
         } 
      }} 
     } 
    } 
} 

}

Veritabanı kodu uzanır veritabanı TDB kullanmayı deneyin vardı olduğunu

package toulios.ptixiakh.toulios; 
import android.content.ContentValues; 
import android.content.Context; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteOpenHelper; 
public class DatabaseHelper extends SQLiteOpenHelper { 

public static final String DATABASE_NAME="Toulios.db"; 
public static final String TABLE_NAME="Foitites_table"; 
public static final String Col_AM="AM"; 
public static final String Col_ONOMA="ONOMA"; 
public static final String Col_EPITHETO="EPITHETO"; 
public static final String Col_EXAMINO="EXAMINO"; 

public DatabaseHelper(Context context) { 
    super(context, DATABASE_NAME, null, 1); 
    // SQLiteDatabase db=this.getWritableDatabase(); 
} 

@Override 
public void onCreate(SQLiteDatabase db) { 
    db.execSQL("create table " + TABLE_NAME+"(AM INTEGER PRIMARY KEY,ONOMA TEXT,EPITHETO TEXT, EXAMINO INTEGER)"); 
} 

@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
    db.execSQL("DROP TABLE IF EXISTS"+TABLE_NAME); 
    onCreate(db); 
} 
public boolean eisagoghfititi(String am,String onoma,String epitheto,String examino) 
{ 
    SQLiteDatabase db=this.getWritableDatabase(); 
    ContentValues contentValues = new ContentValues(); 
    contentValues.put(Col_AM,am); 
    contentValues.put(Col_ONOMA,onoma); 
    contentValues.put(Col_EPITHETO,epitheto); 
    contentValues.put(Col_EXAMINO,examino); 
    long result = db.insert(TABLE_NAME,null,contentValues); 
    if(result == -1) 
     return false; 
    else 
     return true; 
} 

}

+0

Herkesin kullanabileceği tek bir nesneyi tutmak için tekil desenini kullanın. –

+0

Bana bir örnek verebilir misiniz? onu koymak ve nasıl çağırmak vardı? – Fmetal

cevap

0

Yani Broadcast'un onReceive geri aramada veritabanı işlemine sahip olmak ister misiniz? Doğru anladıysam. İşte basit bir örnek.

public class MyBroadcast extends BroadcastReceiver { 


    @Override 
    public void onReceive(final Context context, Intent intent) { 
     HandlerThread handlerThread = new HandlerThread("database_helper"); 
     handlerThread.start(); 
     Handler handler = new Handler(handlerThread.getLooper()); 
     handler.post(new Runnable() { 
      @Override 
      public void run() { 
       DatabaseHelper TDB = new DatabaseHelper(context); 
       TDB.eisagoghfititi(temaxismeno_sms[1],temaxismeno_sms[2],temaxismeno_sms[3],temaxismeno_sms[4]); 
       // have more database operation here 
      } 
     }); 
    } 
} 

Daha karmaşık bir yol onReceive callback'inde bir ervice başlıyor. Ve veritabanı işleminizi hizmetinizde yapın.

+0

Yayın alıcısı sınıf kodunu ekledim! Eğer yardım ederseniz, veritabanı kodu koymak harika olurdu! – Fmetal

+0

@Fmetal, yukarıdaki kodla "TDB.eisagoghfititi (temaxismeno_sms [1], temaxismeno_sms [2], temaxismeno_sms [3], temaxismeno_sms [4])" satırının yerine geçer. – alijandro

+0

Tamam, bu yüzden ithalat bölümünü tamir ettim (tost'ları alıyorum ama dosyalar üzerinde veritabanı oluşturulmuyor). Kodu şimdi olduğu gibi güncelledim ve veritabanı kodunu ekledim. üzgünüm, bunların çok basit şeyler olduğunu biliyorum ama yeniim! – Fmetal