Beiträge von Pommes9485

    Okay, das habe ich verstanden.
    Aber wie sieht das Konkret aus?
    Erstelle ich nicht durch:
    BluetoothDevice.createRfCommSocket...();
    jedesmal einen neuen Socket?
    Dabei ändert sich natürlich auch das BluetoothDevice, abhängig von der Adresse.


    EDIT:
    Ich habe jetzt einfach in der catch Klausel noch ein

    Java
    BluetoothSocket.connect();


    eingefügt. Ist vielleicht ein wenig Prüde, aber erst wenn das auch fehlschlägt gebe ich es auf.
    Bisher funktioniert es und wenn der erste Fehler ausgeworfen wird, sobald der Socket frei ist, dann ist es so sogar relativ logisch.
    Über weitere Informationen wäre ich trotzdem denkbar :P

    Momentan sieht der Ablauf so aus:
    Ich habe ein Datenfeld mit dem Socket.
    In der Schleife dann:
    -BluetoothDevice von BluetoothAdresse
    -Socket von BluetoothDevice.createRfcommSocketToServiceRecord(UUID)
    -Abrufen der Daten
    -Schließen der Streams und des Sockets mit dem oben genannten Code
    Dann wieder von vorne. Ist das so richtig? Oder sollte ich eine lokale Variable nehmen, welche jeden Schleifendurchlauf neu reserviert wird?

    Hallo,


    ich habe folgendes Problem, wenn ich nacheinander mehrere (momentan sind es 2) Bluetooth Geräte um eine Verbindung bitte.
    Ich bekomme dabei folgende Meldung:


    Code
    03-05 15:19:40.348: W/BluetoothAdapter(28027): getBluetoothService() called with no BluetoothManagerCallback03-05 15:19:40.358: D/BluetoothSocket(28027): connect(), SocketState: INIT, mPfd: {ParcelFileDescriptor: FileDescriptor[64]}03-05 15:19:45.478: W/System.err(28027): java.io.IOException: read failed, socket might closed or timeout, read ret: -103-05 15:19:45.478: W/System.err(28027): 	at android.bluetooth.BluetoothSocket.readAll(BluetoothSocket.java:505)03-05 15:19:45.478: W/System.err(28027): 	at android.bluetooth.BluetoothSocket.waitSocketSignal(BluetoothSocket.java:482)03-05 15:19:45.478: W/System.err(28027): 	at android.bluetooth.BluetoothSocket.connect(BluetoothSocket.java:324)03-05 15:19:45.478: W/System.err(28027): 	at com.duw_energie.bat.DownloadData$Download.doInBackground(DownloadData.java:139)03-05 15:19:45.488: W/System.err(28027): 	at com.duw_energie.bat.DownloadData$Download.doInBackground(DownloadData.java:1)03-05 15:19:45.488: W/System.err(28027): 	at android.os.AsyncTask$2.call(AsyncTask.java:288)03-05 15:19:45.488: W/System.err(28027): 	at java.util.concurrent.FutureTask.run(FutureTask.java:237)03-05 15:19:45.488: W/System.err(28027): 	at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)03-05 15:19:45.488: W/System.err(28027): 	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)03-05 15:19:45.488: W/System.err(28027): 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)03-05 15:19:45.488: W/System.err(28027): 	at java.lang.Thread.run(Thread.java:841)


    Dabei habe ich schon gelesen, dass es dazu kommen kann, wenn der Socket nicht vernünftig geschlossen wird. Aber genau das mache ich am Ende der Verbindung:

    Java
    in.close();out.close();sock.close();




    Ich habe keine Ahnung, was ich sonst noch machen kann.

    Ich habe jetzt auch schon Angefangen, den ContentProvider einzubauen. Gibt es da eine "richtige" Lösung, um Dynamisch Tabellen hinzuzufügen?
    Und ich kann auf den ContentProvidern auch mit dem gleichen Context parallel drauf zu greifen, ohne Fehler zu verursachen, oder?
    Ich mache es jetzt in der Query Methode bei jedem Ausführen mit "IF NOT EXISTS", aber toll ist das ja auch nicht.


    Achso, und wenn ich es doch "dreckig" mache, würde dann auch
    [JAVA]if(this.getWritableDatebase().isOpen)
    //Warten
    [/JAVA]
    vor den Methoden funktionieren?

    Hallo,




    ich habe das Problem, dass wenn ich in meiner App gleichzeitig das Lesen und schreiben in die DB probiere, die App abstürzt. Hätte man sich vermutlich denken können -.-


    Einfach vermeiden kann ich es leider nicht, da ich durch den AlarmManager jede Stunde Daten in diese Datenbank reinschreibe und dann kann es passieren, dass der Nutzer genau in diesem Moment Daten davon abruft. Wenn dies passiert kommt es zu diesem Fehler:

    Zitat

    The connection pool for database 'my Database' has been unable to grant a connection to thread 1 with flags 0x2 for 240.0000 seconds


    Ich habe schon gegoogelt, dabei habe ich herausgefunden, dass ein ContentProvider des Problemes Lösung wäre, allerdings kommt es mir ein wenig übertrieben dafür vor, schließlich geht um nur um dieses Problem, ich will keine Daten für andere Apps bereitsstellen oder ähnliches.


    Bisher habe ich es so probiert:

    Java
    static BatteryManager getInstance(Context c) {	 if(bm==null) bm = new BatteryManager(c); return bm; }



    Allerdings bringt das leider nichts, ich wollte vermeiden, das mehrere Objekte von BatteryManager im Umlauf sind. BatteryManager ist mein SQLiteOpenHelper.


    Sobald also über den AlarmManager mit dem BatteryManager agiert wird und ich gleichzeitig Daten abrufe kommt es zu Problemen, welche ich nur durch Neuinstallation lösen kann. Hat da schon jemand mit Erfahrung gemacht?