Ошибка при сохранении данных с фонового процесса в базу данных SQLite

168
20 марта 2018, 01:01

Подскажите пожалуйста, Пытаюсь сохранить данные с фонового процесса в базу данных, и при создании базы данных выдаёт ошибку. Error:(34, 41) error: incompatible types: cannot be converted to Context

Создание базы данных

public class DBHelper  extends SQLiteOpenHelper {
    public static final int DATABASE_VERSION = 1;
    public static final String DATABASE_NAME = "phoneKey";
    public static final String TABLE_CONTACTS = "PhoneKEY";
    public static final String KEY_ID = "_id";
    public static final String KEY_PHONE = "phone";
    public static final String KEY_KLUCH = "kluch";

    public DBHelper(BroadcastReceiver context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);;
    }
    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("create table " + TABLE_CONTACTS + "(" + KEY_ID
                + " integer primary key," + KEY_PHONE + " text," + KEY_KLUCH + " text" + ")");
    }
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("drop table if exists " + TABLE_CONTACTS);
        onCreate(db);
    }
}

Фоновый процесс

public class MessageReceiver extends BroadcastReceiver {
    private static final String ACTION = "android.provider.Telephony.SMS_RECEIVED";
    DBHelper dbHelper;
    @Override
    public void onReceive(Context context, Intent intent) {
        dbHelper=new DBHelper(this);
        SQLiteDatabase database = dbHelper.getWritableDatabase();
        ContentValues contentValues = new ContentValues();
        Bundle bundle = intent.getExtras();
        SmsMessage[] messages;
        String str = "";
        if (bundle != null) {
            Object[] pdus = (Object[]) bundle.get("pdus");
            messages = new SmsMessage[pdus != null ? pdus.length : 0];
            String phone="";
            String message="";
            for (int i = 0; i < messages.length; i++) {
                messages[i] = SmsMessage.createFromPdu((byte[]) (pdus != null ? pdus[i] : null));
                //1-адресс приходс сообщения
                str += messages[i].getOriginatingAddress();
                str += ": ";
                //2-само сообщение
                str += messages[i].getMessageBody();
                str += "\n";
                phone=messages[i].getOriginatingAddress();
                message=messages[i].getMessageBody();
                Cursor cur = database.query(DBHelper.TABLE_CONTACTS, new String[] {"_id", DBHelper.KEY_PHONE}, null, new String[] {}, null, null, null);
                boolean k=cur.moveToFirst();
                    if (k==false) {
                        Log.i(TAG, "базза пуста");
                        contentValues.put(DBHelper.KEY_PHONE, phone);
                        contentValues.put(DBHelper.KEY_KLUCH, message);
                        database.insert(DBHelper.TABLE_CONTACTS, null, contentValues);
                    } else  {
                        database.delete(DBHelper.TABLE_CONTACTS, DBHelper.KEY_ID, null);
                    }
            Toast.makeText(context, str, Toast.LENGTH_SHORT).show();

//            Intent intent1 = new Intent(context, MainActivity.class);
//            intent1.putExtra("message", str);
//            context.startActivity(intent);

            Intent broadcastIntent = new Intent();
            broadcastIntent.setAction("SMS_RECEIVED_ACTION");
            broadcastIntent.putExtra("message", str);
            context.sendBroadcast(broadcastIntent);
//        }
        }
        abortBroadcast();
    }
} }

класс Activity

public class MainActivity extends Activity {
        Button btnSend;
        EditText tvMessage;
        EditText tvNumber;
        IntentFilter intentFilter;
        DBHelper dbHelper;
        public BroadcastReceiver intentReciever=new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                dbHelper = new DBHelper(this);
                SQLiteDatabase database = dbHelper.getWritableDatabase();
                ContentValues contentValues = new ContentValues();
                Cursor cursorrrr = database.query(DBHelper.TABLE_CONTACTS, new String[] {"_id", DBHelper.KEY_PHONE}, DBHelper.KEY_PHONE + " = ?", new String[] {}, null, null, null);
                int phone = cursorrrr.getColumnIndex(DBHelper.KEY_PHONE);
                String telephone=cursorrrr.getString(phone);
                Cursor cursorrr = database.query(DBHelper.TABLE_CONTACTS, new String[] {"_id", DBHelper.KEY_KLUCH}, DBHelper.KEY_PHONE + " = ?", new String[] {telephone}, null, null, null);
                int key = cursorrr.getColumnIndex(DBHelper.KEY_KLUCH);
                String kluch=cursorrrr.getString(key);
                TextView inTxt=(TextView) findViewById(R.id.textMsg);
                inTxt.setText(telephone+" "+kluch);
            }
        };
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        intentFilter=new IntentFilter();
        intentFilter.addAction("SMS_RECEIVED_ACTION");
        btnSend=(Button)findViewById(R.id.btnSend);
        tvMessage=(EditText)findViewById(R.id.tvMessage);
        tvNumber=(EditText) findViewById(R.id.tvNumber);
        btnSend.setOnClickListener(mCorkyListener);

}
    private View.OnClickListener mCorkyListener = new View.OnClickListener() {
        public void onClick(View v) {
            String myMsg=tvMessage.getText().toString();
            String theNumber=tvNumber.getText().toString();
            sendMsg(theNumber, myMsg);
        }};
    private void sendMsg(String theNumber, String myMsg) {
        String SENT="Message Sent";
        String DELIVERED="Message Delivered";
        PendingIntent sentPI=PendingIntent.getBroadcast(this, 0, new Intent(SENT),0);
        PendingIntent deliveredPI=PendingIntent.getBroadcast(this,0,new Intent(DELIVERED),0);
        //myMsg-сообщение на отправку
        android.telephony.SmsManager sms= android.telephony.SmsManager.getDefault();
        sms.sendTextMessage(theNumber, null, myMsg,sentPI,deliveredPI);

    }

    @Override
    protected void onResume(){
        registerReceiver(intentReciever, intentFilter);
        super.onResume();
    }
    @Override
    protected void onPause(){
        unregisterReceiver(intentReciever);
        super.onPause();
    }
}
Answer 1

Класс для работы с БД принимает контекст, а не ресивер:

Т.е. вместо

public DBHelper(BroadcastReceiver context)

должно быть

public DBHelper(Context context)
READ ALSO
Как исключить из обфускации пакет

Как исключить из обфускации пакет

Добрый день! Подскажите, как в android Studio правильно написать правило для исключения из обфускации всего пакета с классами?

148
Деплой сервлета вручную на Tomcat: NotFound

Деплой сервлета вручную на Tomcat: NotFound

Создал простой сервлет:

156
OnTouchListener не работает в Service (на Xiaomi)

OnTouchListener не работает в Service (на Xiaomi)

Есть сервис, который имеет свойства ViewOnTouchListener Дальше при создании сервиса:

157