Forum: Compiler & IDEs in PreferenceFragmentCompat Bluetooths Objekt öffnen Android Java


von Robert W. (Gast)


Lesenswert?

Hey Leute,

Ich schreibe an einer App und komme da nicht so wirklich weiter.
Ich habe eine Klasse Namens SettingsFragmentForBLT die von 
PreferenceFragmentCompat ableitet. In Ihr behandle ich User Eingaben von 
onPreferenceChange. hier gibt es die Möglichkeit, Einstellungen für das 
Bluetooths Gerät vorzunehmen mit dem das Smartphone beim Aufrufen der 
Klasse schon gekoppelt ist. Die BLT Angelegenheiten Regel ich in der 
Klasse Namens DeviceControlActivity.

Ich muss DAS behandelnde Objekt aus DeviceControlActivity in der Klasse 
SettingsFragmentForBLT verfügbar machen, damit ich zum Zeitpunkt der 
Eingabe vom User die Daten an das BLT gerät übermitteln kann. Soweit ich 
weiß, muss ich dafür den Konstuktor der DeviceControlActivity überladen. 
Mein Versuch bezieht sich auf diese Webseite:
https://sciodoo.de/konstruktor-im-java-programm-ein-objekt-uebergeben/#

Hier der Code aus der SettingsFragmentForBLT Klasse:
1
     public static class SettingsFragmentForBLT extends PreferenceFragmentCompat  implements
2
                Preference.OnPreferenceChangeListener {
3
        @Override
4
        public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
5
            addPreferencesFromResource(R.xml.blt_preferences);
6
7
            // Mit einem Listener werden Einstellungsänderungen in PreferencFragmnt (BLT) überwacht
8
            Preference preferenceFeedbackIstAn = findPreference("FeedbackIstAn");
9
            preferenceFeedbackIstAn.setOnPreferenceChangeListener(this);
10
11
            Preference preferenceSwitchfeedback = findPreference("seek_bar_key");
12
            preferenceSwitchfeedback.setOnPreferenceChangeListener(this);
13
        }
14
15
        @Override
16
        public boolean onPreferenceChange(Preference preference, Object newValue) {
17
            String preferenceKey = preference.getKey();
18
19
            DeviceControlActivity deviceControlActivity = new DeviceControlActivity();
20
            DeviceControlActivity msBluetoothLeService = new  deviceControlActivity.getmBluetoothLeService(deviceControlActivity);
21
22
//            BluetoothLeService mBluetoothLeService
23
24
25
            Boolean switchOn = (boolean) newValue;
26
27
            if (preferenceKey.equals("FeedbackIstAn")) {
28
                deviceControlActivity.toggleLEDGren();
29
                Log.w(TAG, "preferenceValue:  " + newValue);
30
31
                if (switchOn) {
32
                    if (msBluetoothLeService != null) {
33
                        msBluetoothLeService.writeCustomCharacteristic(53);
34
                        Log.w(TAG, "Grün wurde eingeschaltet");
35
                    }
36
...

Hier der Code aus DeviceControlActivity:
1
public class DeviceControlActivity extends AppCompatActivity{
2
3
...
4
    public DeviceControlActivity(BluetoothLeService mBluetoothLeService) {
5
        this.mBluetoothLeService = mBluetoothLeService;//Zuweisung mit this
6
    }
7
   public void getmBluetoothLeService(DeviceControlActivity erstelltesObjekt){
8
        this.mBluetoothLeService = erstelltesObjekt.mBluetoothLeService;
9
    }
10
...

Ich danke für eure Unterstützung und wünsche eine angenehme Zeit

: Verschoben durch Moderator
von Sinkaraso (Gast)


Lesenswert?

Ist leider lange her das ich sowas mit java gemacht habe und etwas spät 
dran  aber wie wäre es die Klasse DeviceControlActivity in der Klasse 
SettingsFragmentForBLT zu nutzen. dazu zuerst eine Instanz von 
DeviceControlActivity erstellen und dann die benötigte Methode aufrufen.

1
public static class SettingsFragmentForBLT extends PreferenceFragmentCompat  implements
2
            Preference.OnPreferenceChangeListener {
3
    // Klassenfeld für das mBluetoothLeService-Objekt
4
    private BluetoothLeService mBluetoothLeService;
5
6
    @Override
7
    public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
8
        addPreferencesFromResource(R.xml.blt_preferences);
9
        // Mit einem Listener werden Einstellungsänderungen in PreferencFragmnt (BLT) überwacht
10
        Preference preferenceFeedbackIstAn = findPreference("FeedbackIstAn");
11
        preferenceFeedbackIstAn.setOnPreferenceChangeListener(this);
12
        Preference preferenceSwitchfeedback = findPreference("seek_bar_key");
13
        preferenceSwitchfeedback.setOnPreferenceChangeListener(this);
14
    }
15
16
    @Override
17
    public boolean onPreferenceChange(Preference preference, Object newValue) {
18
        String preferenceKey = preference.getKey();
19
        DeviceControlActivity deviceControlActivity = new DeviceControlActivity();
20
        // Setzen Sie das mBluetoothLeService-Objekt auf das entsprechende Feld in der Klasse
21
        mBluetoothLeService = deviceControlActivity.getmBluetoothLeService(deviceControlActivity);
22
        Boolean switchOn = (boolean) newValue;
23
        if (preferenceKey.equals("FeedbackIstAn")) {
24
            deviceControlActivity.toggleLEDGren();
25
            Log.w(TAG, "preferenceValue:  " + newValue);
26
            if (switchOn) {
27
                if (mBluetoothLeService != null) {
28
                    mBluetoothLeService.writeCustomCharacteristic(53);
29
                    Log.w(TAG, "Grün wurde eingeschaltet");
30
                }

von Gas Gerd (Gast)


Lesenswert?

Es sieht so aus, als ob du versuchst, ein Objekt der Klasse 
DeviceControlActivity innerhalb der Klasse SettingsFragmentForBLT 
verfügbar zu machen. Hierfür musst du jedoch nicht den Konstruktor von 
DeviceControlActivity überladen. Stattdessen kannst du einfach eine 
Instanz von DeviceControlActivity in SettingsFragmentForBLT erstellen 
und auf ihre öffentlichen Methoden zugreifen.

Hier ist ein Beispiel, wie du das machen kannst:

In SettingsFragmentForBLT:

// Erstelle eine Instanz von DeviceControlActivity
DeviceControlActivity deviceControlActivity = (DeviceControlActivity) 
getActivity();

// Rufe die öffentliche Methode toggleLEDGren auf
deviceControlActivity.toggleLEDGren();

// Rufe die öffentliche Methode getmBluetoothLeService auf, um auf das 
Bluetooth-Service-Objekt zuzugreifen
BluetoothLeService msBluetoothLeService = 
deviceControlActivity.getmBluetoothLeService();

// Schreibe Daten an das Bluetooth-Gerät
msBluetoothLeService.writeCustomCharacteristic(53);

In DeviceControlActivity:

// Definiere eine öffentliche Methode, um das Bluetooth-Service-Objekt 
zurückzugeben
public BluetoothLeService getmBluetoothLeService() {
return mBluetoothLeService;
}

Hinweis: Stelle sicher, dass die Instanz von DeviceControlActivity in 
SettingsFragmentForBLT nicht null ist, bevor du auf ihre Methoden 
zugreifst. Du solltest auch sicherstellen, dass das Bluetooth-Gerät 
korrekt verbunden und gekoppelt ist, bevor du versuchst, Daten an das 
Gerät zu senden.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.