Как убрать ошибку несовместимых типов из android studio - PullRequest
0 голосов
/ 03 марта 2020

Привет всем. Я пишу код для обработчика, который обрабатывает функцию и вызывает ее каждые 5 секунд. Я использовал код ниже, но он показывает мне следующую ошибку. основная идея заключается в том, чтобы сначала запустить его через 5 секунд и присвоить значение Bluetooth_service , и служба Bluetooth отобразит это в панели уведомлений. панель уведомлений работает нормально только для значения. теперь через это я хочу изменить значение через 5 секунд.

error: incompatible types: <anonymous BleReadCallback> cannot be converted to Runnable
                        mHandler.postDelayed(this, 5000);

код

        Handler mHandler = new Handler();

        Runnable mToastRunnable = new Runnable() {
        @Override
        public void run() {
            if(manager.getConnectedDevices().size()<=0){
                Toast.makeText(MainActivity.this,"No connected devices", Toast.LENGTH_LONG).show();
                return;
            }
            BleDevice device = manager.getConnectedDevices().get(0);
            Map<String , String> reciveData =  getSpecificServiceInfo(device , CHARACTERISTIC_READABLE);
            for (Map.Entry<String, String> e : reciveData.entrySet()){
                manager.read(device, e.getKey(), e.getValue(), new BleReadCallback() {
                    @Override
                    public void onRead(byte[] data, BleDevice device) {

                        Toast.makeText(MainActivity.this, "Read success!   data:  " + new String(data), Toast.LENGTH_LONG).show();
                        Intent intent = new Intent(MainActivity.this , BluetoothService.class);
                        intent.putExtra("inputString" ,new String(data));
                        startService(intent);
                        mHandler.postDelayed(this, 5000);
//                        mHandler.postDelayed(MainActivity.this.getApplication() , 5000);
                        TextView textView = findViewById(R.id.textView);
                        textView.setText(new String(data));

                    }

                    @Override
                    public void onFail(int failCode, String info, BleDevice device) {
//                    Toast.makeText(MainActivity.this, "Read fail!   data:  " + info, Toast.LENGTH_LONG).show();

                    }
                });
            }

        }
    };
    private void readData(){
        mToastRunnable.run();
    }

Служба Bluetooth:

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
            String input = intent.getStringExtra("inputString");
            Intent notificationIntent = new Intent(this, MainActivity.class);
            PendingIntent pendingIntent = PendingIntent.getActivity(this, 0,
                    notificationIntent, 0);
            Notification notification = new NotificationCompat.Builder(this, CHANNEL_ID)
                    .setContentTitle("Bluetooth Services")
                    .setContentText(input)
                    .setSmallIcon(R.drawable.ic_android)
                    .setContentIntent(pendingIntent)
                    .build();
            startForeground(1, notification);
            return START_NOT_STICKY;
}

1 Ответ

1 голос
/ 04 марта 2020

Добавить новый метод в классе. Пример: newMethod И заменить this на mToastRunnable Вызвать созданный метод из метода переопределения onRead

void newMethod(byte[] data){
    Toast.makeText(MainActivity.this, "Read success!   data:  " + new String(data), Toast.LENGTH_LONG).show();
    Intent intent = new Intent(MainActivity.this , BluetoothService.class);
    intent.putExtra("inputString" ,new String(data));
    startService(intent);
    mHandler.postDelayed(mToastRunnable, 5000);//use mToastRunnable instead of this
//                        mHandler.postDelayed(MainActivity.this.getApplication() , 5000);
    TextView textView = findViewById(R.id.textView);
    textView.setText(new String(data));
}

основной код

final Handler mHandler = new Handler();
final Runnable mToastRunnable = new Runnable() {
    @Override
    public void run() {
        if(manager.getConnectedDevices().size()<=0){
            Toast.makeText(MainActivity.this,"No connected devices", Toast.LENGTH_LONG).show();
            return;
        }
        BleDevice device = manager.getConnectedDevices().get(0);
        Map<String , String> reciveData =  getSpecificServiceInfo(device , CHARACTERISTIC_READABLE);
        for (Map.Entry<String, String> e : reciveData.entrySet()){
            manager.read(device, e.getKey(), e.getValue(), new BleReadCallback() {
                @Override
                public void onRead(byte[] data, BleDevice device) {
                    newMethod(data);//call the created method here
                }

                @Override
                public void onFail(int failCode, String info, BleDevice device) {
//                    Toast.makeText(MainActivity.this, "Read fail!   data:  " + info, Toast.LENGTH_LONG).show();

                }
            });
        }

    }
};

private void readData(){
    mToastRunnable.run();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...