Ich denke auch, dass das ein Bug ist. Ich bau dann mal einen Workaround. Danke, dass Du Dir die Zeit genommen hast
Beiträge von hs1
-
-
Hast du die ID auch mit unterstrich definiert "_id" ?
Die Id überbietet du nicht zufällig mit im values Objekt, wenn ja das darfst du nicht.Ja, die id ist mit Unterstrich definiert und wird nicht manuell gesetzt.
Java
Alles anzeigenpublic static final String COLUMN_ID = "_id"; public static final String COLUMN_KONTO = "konto"; public static final String COLUMN_VORGANG_KEY = "vorgang_key"; public static final String COLUMN_BUCHUNG_ID = "buchung_id"; public static final String COLUMN_UMSATZ_KEY = "umsatz_key"; public static final String COLUMN_UMSATZNUMMER = "umsatznummer"; public static final String COLUMN_UMSATZ = "umsatz"; public static final String COLUMN_ANGELEGT_VON = "angelegt_von"; public static final String COLUMN_ANGELEGT_AM = "angelegt_am"; public static final String COLUMN_GLOBAL_UNIQUE_ID_UMSATZ = "global_unique_id_umsatz"; public static final String SQL_CREATE_TABLE = "CREATE TABLE " + TABLE_NAME + "(" + COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT , " + COLUMN_KONTO + " TEXT, " + COLUMN_VORGANG_KEY + " INTEGER, " + COLUMN_BUCHUNG_ID + " INTEGER, " + COLUMN_UMSATZ_KEY + " INTEGER, " + COLUMN_UMSATZNUMMER + " TEXT, " + COLUMN_ZAHLUNGSART + " TEXT, " + COLUMN_UMSATZ + " REAL, " + COLUMN_ANGELEGT_VON + " INTEGER, " + COLUMN_ANGELEGT_AM + " INTEGER, " + COLUMN_GLOBAL_UNIQUE_ID_UMSATZ + " TEXT " + ");"; public static final String SQL_CREATE_INDICES = "CREATE INDEX IF NOT EXISTS idx1buchung_zahlungen ON buchung_zahlungen (" + COLUMN_KONTO + "," + COLUMN_BUCHUNG_ID + ");" + "CREATE INDEX IF NOT EXISTS idx2buchung_zahlungen ON buchung_zahlungen (" + COLUMN_UMSATZ_KEY + "," + COLUMN_KONTO + ");" + } public ContentValues getContentValues(ZahlungModel pZahlung){ ContentValues retVal = new ContentValues(); retVal.put(ZahlungTableHelper.COLUMN_KONTO, pZahlung.getKonto()); retVal.put(ZahlungTableHelper.COLUMN_UMSATZ_KEY, pZahlung.getUmsatzKey()); retVal.put(ZahlungTableHelper.COLUMN_UMSATZ, pZahlung.getZahlungsbetrag()); retVal.put(ZahlungTableHelper.COLUMN_VORGANG_KEY, pZahlung.getVorgangKey()); retVal.put(ZahlungTableHelper.COLUMN_BUCHUNG_ID, pZahlung.getBuchungId()); retVal.put(ZahlungTableHelper.COLUMN_UMSATZNUMMER, pZahlung.getUmatzNummer()); retVal.put(ZahlungTableHelper.COLUMN_ANGELEGT_AM, Converter.persistDate(pZahlung.getAngelegtAm())); retVal.put(ZahlungTableHelper.COLUMN_ANGELEGT_VON, pZahlung.getAngelegtVon()); retVal.put(ZahlungTableHelper.COLUMN_GLOBAL_UNIQUE_ID_UMSATZ , pZahlung.getGlobalUniqueIdUmsatz()); return retVal; }
-
Das ist eigentlich nicht möglich, denn die Indizes die noch auf der Tabelle liegen sind alle nicht eindeutig/unique. Wenn das insert fehlschlägt müsste die Methode laut Doku -1 zurückliefern (the row ID of the newly inserted row, or -1 if an error occurred), tut sie aber nicht. Das Einfügen funktioniert auch. Sehr seltsames verhalten.
-
Hallo Leute,
ich habe in meiner SQLITE-Datenbank eine Tabelle mit einer AUTOINCREMENT-Spalte (INTEGER PRIMARY KEY AUTOINCREMENT -> ID)
Wenn ich Datensätze in die Tabelle einfüge kommt es sehr sporadisch vor, dass die insert-Funktion nicht die AUTOINCREMENT-ID sondern eine hohe negative Zahl zurück gibt: z. B. -14073748835558
Das Query schlägt nicht fehlt, es kommt keine Exception, der Datensatz wird auch in die Datenbank eingefügt (mit positiver und korrekter ID). Woran könnte es liegen, das SQLLITE anstatt der richtigen ID eine negative (siehe oben) zurück gibt? Verwendet wird Android 2.3.4 (Kundenvorgabe).
Viele Grüße
hs1
-
Jop, ich habe den Aufruf sogar wie folgt geändert (Tip in einem anderen Forum):
Java
Alles anzeigenrunOnUiThread (new Runnable() { public void run() { setKeepScreenOn(true); } }); runOnUiThread (new Runnable() { public void run() { setKeepScreenOn(false); } }); public void setKeepScreenOn(boolean pOn){ if (pOn){ getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); } else{ getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); } }
-
Hallo Leute,
ich habe die Anforderung bekommen, dass meine App während bestimmte Funktionen laufen (z. B. der Benutzer drückt auf einen Button und es werden Daten vom Server abgerufen) der Screen immer an bleiben soll (setKeepScreenOn(true)). Nachdem die jew. Funktion durchgelaufen ist, soll der Dauer-Screen-On-Modus wieder deaktiviert werden (setKeepScreenOn(false)), so dass der Bildschirm entsprechend der im System eingestellten Zeit irgendwann wieder ausgeht.
Meine Anwendung (läuft auf 2.3-Geräten) besteht aus einer einzigen Activity die ein FrameLayout enthält in das die Fragmente immer eingesetzt werden.
Ich habe verschiedene Ansätze versucht die leider alle nicht funktionierten, weshalb ich mich jetzt an Euch wende:
Im Manifest ist folgendes gesetzt:
<uses-permission android:name="android.permission.WAKE_LOCK" />Versuch 1:
Codepublic void setKeepScreenOn(boolean pOn){ View view = getLayoutInflater().inflate(R.layout.activity_main, null); view.setKeepScreenOn(pOn); }
-> Der Aufruf der Funktion setKeepScreenOn hat überhaupt keine Auswirkung
Versuch 2:Code
Alles anzeigenprivate PowerManager mPowerManager; private PowerManager.WakeLock mWakeLock; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mPowerManager = (PowerManager) getSystemService(Context.POWER_SERVICE); mWakeLock = mPowerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP, "no sleep"); .......................} public void setKeepScreenOn(boolean pOn){ try { if (pOn){ mWakeLock.acquire(); } else{ if (mWakeLock.isHeld()){ mWakeLock.release(); } } } catch (Exception e) { e.printStackTrace(); } }
-> Der Aufruf der Funktion setKeepScreenOn hat überhaupt keine Auswirkung. mWakeLock.isHeld() ist false, obwohl das WakeLock zwischendurch nicht released wird.Versuch 3:
Codepublic void setKeepScreenOn(boolean pOn){ if (pOn){ getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); } else{ getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); } }
-> Der Aufruf der Funktion setKeepScreenOn hat überhaupt keine Auswirkung. Wenn ich die Funktion setKeepScreenOn(true) testweise im onCreate aufrufe bleibt der Bildschirm immer an, auch wenn später wieder setKeepScreenOn(false) aufgerufen wird.Habt Ihr eine Idee wie ich die Problematik lösen kann?
Gruß hs1
-
Danke, das werd' ich mir anschauen.
-
Hallo Leute,
ich habe eine Textbox mit AutoComplete realisiert. Die Anwender geben einen Teil des Kundennamens ein und die App zeigt die Treffer aus der Datenbank an.
Teilweise kommt es bei den Benutzern meiner App zu folgender Exception:
Java
Alles anzeigenjava.util.ConcurrentModificationException at java.util.ArrayList$ArrayListIterator.next(ArrayList.java:569) at xxxxxx.Adapter.KundeAutoCompleteAdapter$1.publishResults(KundeAutoCompleteAdapter.java:156) at android.widget.Filter$ResultsHandler.handleMessage(Filter.java:282) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:137) at android.app.ActivityThread.main(ActivityThread.java:4921) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:511) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1027) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:794) at dalvik.system.NativeStart.main(Native Method)
In dem ArrayAdapter kommt in der 7. Zeile sporadisch die oben stehende Exception:
Java
Alles anzeigen@Override protected void publishResults(CharSequence constraint, FilterResults results) { List<KundeModel> filterList = (ArrayList<KundeModel>) results.values; if (results != null && results.count > 0) { clear(); for (KundeModel kunde : filterList) { add(kunde); notifyDataSetChanged(); } } }
Kann mir jemand sagen, was genau zu der Exception führt? Muss das notfiyDataSetChanged unter die Schleife?Gruß hs1
-
Hallo Leute,
ich verwende die BarcodeScan-App von zxing um Barcodes in meiner App zu scannen. Das Scannen selber funktioniert auch und ich bekomme den Barcode zurück. Nun möchte ich, wenn ich den Barcode zurück bekomme direkt ein anderes Fragment anzeigen. Leider bekomme ich immer folgende Exception:
java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState
Mein Code sieht (etwas vereinfacht) so aus:
Java
Alles anzeigenpublic void StarteBarcodeScan(Activity pActivity){ try { Intent localIntent = new Intent("com.google.zxing.client.android.SCAN"); localIntent.setPackage("com.google.zxing.client.android"); localIntent.putExtra("SAVE_HISTORY", false); startActivityForResult(pActivity, localIntent, Constants.BARCODE_SCAN_REQUESTED, null); } catch (Exception e) { e.printStackTrace(); Logger.e(e, "BarcodeScanner-App nicht installiert?"); } }
Java
Alles anzeigenpublic void onActivityResult(int requestCode, int resultCode, Intent intent) { if (requestCode == Constants.BARCODE_SCAN_REQUESTED) { if (resultCode == RESULT_OK) { String barcode = intent.getStringExtra("SCAN_RESULT"); String format = intent.getStringExtra("SCAN_RESULT_FORMAT"); if (!barcode.isEmpty()){ try { this.setCurrentFragment(BuchungAnzeigeFragment.class); } catch (Exception e) { e.printStackTrace(); } } // Handle successful scan } else if (resultCode == RESULT_CANCELED) { // Handle cancel } } }
Java
Alles anzeigen// sets the current fragment private Fragment setCurrentFragment(Class pClass) { this.stopAutoSync(); this.startAutoSync(); Fragment fragment = null; Class fragmentClass = pClass; try { fragment = (Fragment) fragmentClass.newInstance(); this.setToolbar(fragment); } catch (Exception e) { e.printStackTrace(); } // Insert the fragment by replacing any existing fragment FragmentManager fragmentManager = getSupportFragmentManager(); fragmentManager.beginTransaction().replace(R.id.flContent, fragment).addToBackStack(null).commit(); this._Drawer.closeDrawers(); return fragment; }
In Zeile 19 des letzten Codeblocks kommt die Exception.Habt Ihr eine Idee was ich anders machen muss um den Fehler zu beheben?
Gruß hs1
-
Hallo Leute,
kann ich irgendwie feststellen, ob eine gewisse Zeit nicht's in meiner App gemacht wurde (Touch-Screen bedient, Hardware-Menütasten verwendet)? Oder andersrum, gibt es eine Art globalen Listener für Touch-Eingaben?
Hintergrund: Mein Kunde möchte, dass wenn ein paar Minuten nichts in der App gemacht wurde ein Sync durchgeführt wird.Gruß hs1
-
Hallo Leute,
in meiner App kann man Accounts anlegen. Kann ich den Namen des Accounts irgendwie dynamisch gestalten, d. h. per Code festlegen? Bisher geschieht das per android:label im XML-File welches den account-authenticator enthält. Gibt es noch eine andere Möglichkeit?
XML<?xml version="1.0" encoding="utf-8"?> <account-authenticator xmlns:android="http://schemas.android.com/apk/res/android" android:accountType="xxxxxxx" android:icon="@drawable/icon48" android:smallIcon="@drawable/icon48" android:label="@string/account_label" android:accountPreferences="@xml/prefs"/>
Eine weitere Frage:
Kann ich dem Benutzer in den Eigenschaften des Accounts irgendwie eine Möglichkeit zur Änderung der Logindaten anbieten?Gruß hs1
-
Klingt gut schaue ich mir mal an. Müsste mit einem Timer im Hintergrund der ständig den Text ändert (Zeit herunterzählt) ja eigentlich funzen.
-
Hallo Leute,
ich schreibe ein App und habe die Vorgabe, dass alle paar Minuten eine Maske angezeigt wird in der ein Countdown herunterzählt (z. B. 10 Minuten). Sind die 10 Minuten abgelaufen ohne das der Benutzer den Button "Abbrechen" ausgewählt hat, soll kein Sync stattfinden, ansonsten soll ein automatischer Sync durchgeführt werden.
Jetzt meine Frage: Wie realisiere ich es, dass automatisch ein Fenster mit Countdown und Abbrechen-Button eingeblendet wird?
Ich arbeite mit einer Activity in der mittels Fragmenten unterschiedliche Eingabemaske angezeigt werden. Wäre einen Timer in der MainActivity laufen zu lassen, der dann das Countdown-Fragment aufruft ein vernünftiger Weg? Wie komme ich bei "Abbrechen" wieder zu meinen vorherigen Eingaben zurück?Gruß hs1