Besten Dank für Deine Hilfe!
Mit dem Code von deinem Link hab ichs hingekriegt!!! 1000 Dank!!
Beiträge von M3doXX
-
-
Java
Date calStart = new Date(d.getStartMillis()); System.out.println("Start " + calStart); Date calEnd = new Date(d.getEndMillis()); System.out.println("End " + calEnd); long difference = calEnd.getTime() - calStart.getTime(); Date fullTime = new Date(difference); System.out.println("Arbeitszeit: " + fullTime);
So sieht der Code im Moment aus. (Er sah schonmal komplett anders aus).
Das Problem ist ja, dass bei der Differenz eine Stunde zuviel rauskommt und ich glaube! ich habe den Fehler gefunden.
Das Start und Enddatum wird in MESZ angegeben und das fullTime-Datum in MEZ.
Kann ich die Sommerzeit da irgendwie mit einstellen? -
Hi.
Habs jetzt auch mit Calendar versucht, leider ohne Erfolg.
Ich kriege bei der Differenz von End- und Startdatum immer eine Stunde zuviel. Woran könnte das liegen?
Habe auch schon mit der TimeZone versucht, aber auch dann blieb der Erfolg leider aus
Zur Info: Die Start- und Enddaten hole ich aus meinem Google Kalender als Millisekunden. -
Hallo zusammen,
ich brauche mal Eure Hilfe!
Ich probiere seit Tagen eine vernünfitge Berechnung für meine (eigentlich total einfache) Idee.
Ich möchte meine reine Arbeitszeit ausrechen in einer Android App.
Undzwar habe ich dafür ein Datum inkl Uhrzeit in Millisekunden als Startdatum und das gleiche nochmal als Enddatum.
Also muss ich z.B. arbeiten von Samstag 09:00Uhr (Startdatum in Millis) bis Samstag 16:00Uhr (Enddatum).Nun will ich erstmal die komplette Zeit ausrechen (EndDatum - StartDatum), dann meine Pausenzeiten abziehen und somit die reine Arbeitszeit erhalten.
Die Pausenzeiten definiere ich in einer if-Verschachtelung.Ich habs mit java.util.Date und JodaTime probiert. Allerdings ohne Erfolg.
Entweder fehlt immer irgendwo eine Stunde oder ich habe Probleme mit dem Format HH:mm .
Hat jemand eine Lösung für dieses (einfache) Problem??
Ich wäre sehr sehr dankbar!!
GrußM3doXX
-
Hallo zusammen,
ich habe folgendes Problem.
Ich habe eine App geschrieben, die eine SQLite DB enthält.
Außerdem habe ich eine MySQL DB aufgesetzt im Internet. Ich möchte nun folgendes tun:
Ich will den Inhalt aus der MySQL DB in meine lokale SQLite übertragen. Tabelle für Tabelle.
Dieser "Synchronisierungsvorgang" sieht so aus, dass als erstes eine Arraylist erstellt wird mit den Daten aus der Online-DB, dann wird die lokale Tabelle geleert und dann wird die Arraylist aus dem Netz in die lokale DB eingefügt. (Ich weiß das ist kein richtiges synchronisieren, aber für mich reicht das erstmal )
Wenn ich nun eine Tabelle "synchronisieren" will, dann funktioniert das einwandfrei. Nehme ich aber eine andere dazu, dann kriege ich andauernd irgendwelche SQL-Fehler, dass ich meine SQLite DB nicht richtig geschlossen habe o.Ä..
Ich denke, dass es daran liegt, dass die Abfragen nicht sequentiell ablaufen, sondern sich irgendwie überschneiden.
Ich suche also nach einer Lösung, die mir es ermöglicht erst die erste Tabelle zu syncen, und erst wenn die erste fertig ist, dann soll die nächste starten usw.
Jemand eine Idee? Ich hab schon an ASync Tasks gedacht und auch schon gegoogelt, allerdings weiß ich nicht wie das genau funktionieren soll und außerdem ist die "Synchronisierungsreihenfolge" und die zu syncenden Tabellen immer unterschiedlich.
Für Eure Hilfe bin ich äußerst dankbar!Gruß
M3doXX
-
Hallo Khh,
hättest du eventuell Codeschnipsel für mich?
Ich hatte das ja schonmal probiert. Nur irgendwie hatte ich da ein Problem, dass die einzelnen Skripte durcheinander ausgeführt wurden und ich nicht genau wusste wie ich die explizit nacheinander ausführen kann...
Gruß
M3doXX
-
Hallo UweApps,
ja phpmyAdmin läuft. Das Problem ist aber, dass ich den Dump aus der App heraus erstellen will. Sprich : Ich klicke in meiner App auf einen Button und dann wird ein Dump von meiner MySQL (online) DB erstellt und in meine lokale DB eingelesen.
Gibt es eine Möglichkeit phpmyadmin von aussen zu sagen, dass es einen Dump machen soll?
Brauche ich da nicht ein eigenes Skript?Gruß
M3doXX
-
Also ich hab jetzt erstmal rausgefunden, wie ich das rein theoretisch machen kann.
Ich schreibe ein PHP-Skript, dass mir auf meinem Server den dump erstellt und den lade ich dann runter und lese ihn in meine SQLite DB ein.
Soweit die Theorie.
Allerdings scheitert es jetzt bei mir schon bei Schritt 1: Das PHP Skript
Hat jemand vielleicht einen Codeschnipsel für mich, der ein MySQL Dump erstellt? Ich habe bereits zwei Skripte ausprobiert, die ich in den Weiten des WWW gefunden habe, aber die haben beide nicht funktioniert...
Also wenn mir da bei Schritt 1 schonmal jemand weiterhelfen könnte, wäre das super!!!
Besten DankGruß
M3doXX
-
@ChampS:
Die Lösung finde ich auch super (wenn das so möglich ist...)
Hat jemand eine Idee wie das funktionieren kann? Ich hab mal nach MySQL Dump gegoogelt, aber nichts wirklich gutes gefunden.
Zumindest nicht, wie ich aus der App raus die .sql erstellen kann.
Würde mich über jede Hilfe freuen!
Besten Dank!!M3doXX
-
Hallo zusammen,
ich möchte folgendes umsetzen:
Ich habe eine MySQL DB und eine SQLite DB. Ich möchte diese in meiner App "synchronisieren", d.h. für mich vereinfacht: Ich will einfach nur die lokale DB leeren und sie mit den Daten aus der MySQL füllen! Also keine großen Sync-Algorithmen oder so
Jetzt habe ich in den Datenbanken jeweils vier Tabellen, die jeweils nacheinander geleert und wieder gefüllt werden sollen.
Für jede Tabelle gibt es eine Methode, die die lokalen leert und wieder füllt.
Dafür habe ich in meiner Activity eine ASync-Task erstellt, die solange einen Ladebalken zeigt, bis fertig synchronisiert wurde.
Jetzt kriege ich aber jede Menge Exceptions beim synchronisieren.
Meine generelle Frage wäre: Wie kriege ich das hin, dass eine Methode nach der anderen ausgeführt wird?
Ich habe nämlich das Gefühl, dass die sich überschneiden, weil in den Exceptions oft steht: "database is locked".
Also das ich z.B. die Methoden so lange sperre, bis die vorherige fertig ist?
Besten DankGruß
M3doXX
-
Hi,
ich habe gestern mal das mit den Settings rausgenommen und dann kriege ich die gleiche Fehlermeldung mit einem anderem SQL-Statement:
Codesqlite returned: error code = 17, msg = statement aborts at 17: [INSERT INTO TEST_GAME(DATE, TIME, PLACE, REFEREE, HOME, GUEST) VALUES(?, ?, ?, ?, ?, ?);] database schema has changed
Kann das vielleicht irgendwie damit zusammenhängen, das sich die Instanzen überlagern, bzw das das Ganze nicht wirklich synchron läuft?
Aber ich mache das ja mit ASync-Tasks also sollte es doch eigentlich rund laufen oder? Ich habe übrigens gerade festgestellt, dass die Funktion nicht immer richtig funktioniert! Ab und zu synchronisiert er nicht alle Objekte oder manche doppelt!? Also liegt doch was im Argen..
Komplett debuggt habe ich das Ganze noch nicht. Werde ich heute Abend mal ausprobieren, hab gestern inner Uni gelernt wie das geht
Nur ich hab kein Plan wo ?! Ouh man das is echt zum ko**** hier
GrußM3doXX
-
Hi matthias,
ich habe den alles mal auf null gesetzt (Cache leeren, clean, Neuinstallation) und der Fehler besteht immer noch.
Es ist ja nicht nur das er mir diesen Fehler ausgibt, sondern auch "InsertGame funktioniert nicht" an dieser Stelle:Java
Alles anzeigenprotected Boolean doInBackground(Void... arg0) { try { gameDataSource.insertGame(homeTeam, guestTeam, place, referee, gameDate, time); res = true; } catch (Exception e) { //TODO Exception res = false; } return res; } protected void onPostExecute(Boolean result) { if (result) { gameDataSource.close(); System.out.println("InsertGame funktioniert!"); } else { gameDataSource.close(); System.out.println("InsertGame funktioniert nicht!"); }
Er müsste doch eigentlich "InsertGame funktioniert" ausgeben, da die Variable "res" nach der DB-Abfrage auf true gesetzt wird?!
Soll ich das wirklich einfach ignorieren? Irgendwie kann ich mich damit nicht zufriedengeben.
GrußM3doXX
-
Hallo zusammen,
also ich habe folgendes Problem:
Ich möchte meine mySQL DB mit einer lokalen SQLite DB synchronisieren.
Dazu leere ich die SQLite Tabelle und will in einer for-Schleife die Daten aus der MySQL DB auslesen und dann Objekt für Objekt in die SQLite DB schreiben.
Das leeren funktioniert und das einfügen eigentlich auch, allerdings sagen meine LogCat Ausgaben etwas anderes.
Hier mal meine Funktionen.
In der Activity sieht das Ganze so aus:Java
Alles anzeigenprivate class SyncTask extends AsyncTask<Void, Void, Boolean> { private Access access; Boolean res; protected void onPreExecute() { access = new Access(); mProgressDialog = ProgressDialog.show(ScheduleActivity.this, "Daten aktualisieren...", "Bitte warten..."); } protected Boolean doInBackground(Void... arg0) { try{ res = access.syncGames(ScheduleActivity.this); } catch (Exception e){ res = false; e.printStackTrace(); } return res; } protected void onPostExecute(Boolean result) { if (result) { mProgressDialog.dismiss(); Toast.makeText(ScheduleActivity.this, "Erfolgreich aktualisiert!", Toast.LENGTH_LONG).show(); loadListView(); } else if (!result) { mProgressDialog.dismiss(); Toast.makeText(ScheduleActivity.this, "Fehler bei Aktualisierung!", Toast.LENGTH_LONG).show(); loadListView(); } else { mProgressDialog.dismiss(); } } }
Das ist also eine ASyncTask, die solange einen ProgressDialog anzeigt, bis das Synchronisieren fertig ist.
Hier wird die Funktion access.syncGames(ScheduleActivity.this) aufgerufen. Die sieht wie folgt aus:Java
Alles anzeigenpublic Boolean syncGames(Context context){ Boolean res; String result = DatabaseConnection.connect("game", context); JSONArray jArray; sqLiteAccess.clearGameTable(context); try{ jArray = new JSONArray(result); JSONObject json_data=null; for(int i=0;i<jArray.length();i++){ json_data = jArray.getJSONObject(i); String homeTeam = json_data.getString("HOMETEAM"); String guestTeam = json_data.getString("GUESTTEAM"); String place = json_data.getString("PLACE"); String referee = json_data.getString("REFEREE"); String gameDate = json_data.getString("DATE"); String time = json_data.getString("TIME"); try{ sqLiteAccess.insertGame(homeTeam, guestTeam, place, referee, gameDate, time, context); } catch (Exception e) { e.printStackTrace(); } } res = true; } catch(JSONException e1){ System.out.println("Keine Daten gefunden - Meldung: " + e1.getMessage()); res = false; } catch (ParseException e1) { System.out.println("Parse Exception in DatabseRequest.syncGames: " + e1.getMessage()); e1.printStackTrace(); res = false; } return res; }
Hier wird als erstes mitdie SQLite Tabelle geleert. Dann wird in der for-Schleife nach und nach mit
die Spiele in die SQLite DB eingefügt.
Diese beiden Funktionen bestehen wieder aus AsyncTasks die wie folgt aussehen:Java
Alles anzeigenprivate class SyncTaskClearGameTable extends AsyncTask<Void, Void, Boolean> { GameDataSource gameDataSource; Boolean res; private SyncTaskClearGameTable(Context context) { gameDataSource = new GameDataSource(context); } protected void onPreExecute() { gameDataSource.open(); } protected Boolean doInBackground(Void... arg0) { try{ gameDataSource.clearGameTable(); res = true; } catch (Exception e) { //TODO Exception res = false; } return res; } protected void onPostExecute(Boolean result) { if (result) { gameDataSource.close(); System.out.println("clearGameTable funktioniert!"); } else { gameDataSource.close(); System.out.println("clearGameTable funktioniert nicht!"); } } }
und
Java
Alles anzeigenprivate class SyncTaskInsertGame extends AsyncTask<Void, Void, Boolean>{ GameDataSource gameDataSource; private SyncTaskInsertGame(Context context) { gameDataSource = new GameDataSource(context); } protected void onPreExecute() { gameDataSource.open(); } protected Boolean doInBackground(Void... arg0) { try { gameDataSource.insertGame(homeTeam, guestTeam, place, referee, gameDate, time); res = true; } catch (Exception e) { //TODO Exception res = false; } return res; } protected void onPostExecute(Boolean result) { if (result) { gameDataSource.close(); System.out.println("InsertGame funktioniert!"); } else { gameDataSource.close(); System.out.println("InsertGame funktioniert nicht!"); } } }
Die Funktionen die dahinter liegen sind:
Javapublic void clearGameTable() { gameDataBase.execSQL("DELETE FROM '"+phpFileName+"'"); gameDataBase.execSQL("VACUUM"); }
und
Java
Alles anzeigenpublic Game insertGame(String home, String guest, String place, String referee, String date, String time) { Game currentGame; ContentValues values = new ContentValues(); values.put("HOME", home); values.put("GUEST", guest); values.put("PLACE", place); values.put("REFEREE", referee); values.put("DATE", date); values.put("TIME", time); long insertId = gameDataBase.insert(phpFileName, null, values); Cursor cursor = gameDataBase.query(phpFileName, allColumns, "_id = " + insertId, null, null, null, null, null); cursor.moveToFirst(); currentGame = cursorToSetting(cursor); cursor.close(); return currentGame; }
Also mein Problem ist nun folgendes: LogCat sagt mir:
1. clearGameTable funktioniert
2. sqlite returned: error code = 17, msg = statement aborts at 14: [SELECT VALUE FROM SETTINGS WHERE SETTING = 'team'] database schema has changed
3. insertGameTable funktioniert nicht!Dieses Setting holt mir einfach nur den Datanbank Präfix aus der SQLite DB.
Wie gesagt das Ganze funktioniert eigentlich, aber der LogCat sagt halt was anderes.
Jemand eine Idee was das bedeuten könnte? Ich hoffe das war nicht zuviel Code auf einmal, aber ich habe ewig bei Google gesucht und alles ausprobiert und Ihr seid (hoffentlich) meine letzte Rettung!!
Besten Dank schonmal!Gruß
M3doXX
-
Hallo zusammen,
ich möchte einen String in ein Date Format bringen und das Date Format in Millisekunden.
Habe nun folgende Methode:Java
Alles anzeigenpublic void formatTime() throws java.text.ParseException { try { SimpleDateFormat timeFormat = new SimpleDateFormat("HH:mm"); timeFormat.setTimeZone(TimeZone.getTimeZone("UTC")); System.out.println(time); game_time = timeFormat.parse(time); System.out.println(game_time); timeInMillis = game_time.getTime(); System.out.println(timeInMillis); } catch (ParseException e) { e.printStackTrace(); return; } }
Der String time enthält "15:00".
Die Ausgabe der drei System.out Anweisungen sind wie folgt:15:00
Thu Jan 01 16:00:00 MEZ 1970
54000000Ich benutze die timeInMillis für einen Intent, der einen neuen Kalender Eintrag erzeugt.
Wenn der nun die System-Activity "NeuenKalenderEintragErzeugen" aufruft, ist die startZeit auf 17:00 gesetzt ?!?!?!
Was läuft da falsch???
GrußM3doXX
-
Ich habe es mit ganz viel Try & Error hingekriegt
Ich rufe jetzt einfach jedes Mal wenn ich eine neue Activity öffne die doWork() auf.
Funktioniert wunderbar
Trotzdem danke -
Habe nach längerer Suche in Google jetzt doch anscheinend das gefunden, was ich brauche(Listener).
Hier mal der Link:
http://stackoverflow.com/quest…ener-to-a-custom-variableIn der Activity brauche ich ja nur die Methode onStateChange() und onCreate() .
In der Klasse InternetManager habe ich die Methode doYourWork() nun wie folgt gefüllt:Java
Alles anzeigenpublic void doYourWork(Context context) { ConnectivityManager connec = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); // ARE WE CONNECTED TO THE NET if ( connec.getNetworkInfo(0).getState() == NetworkInfo.State.CONNECTED || connec.getNetworkInfo(1).getState() == NetworkInfo.State.CONNECTED ) { isInternetOn = true; if (mListener != null) mListener.onStateChange(isInternetOn); } else if ( connec.getNetworkInfo(0).getState() == NetworkInfo.State.DISCONNECTED || connec.getNetworkInfo(1).getState() == NetworkInfo.State.DISCONNECTED ) { isInternetOn = false; if (mListener != null) mListener.onStateChange(isInternetOn); } }
Edit:
Es funktioniert schon, das der Status an die Activity zurückgegeben wird beim Start der App.
Allerdings soll er wenn ich das Internet ausschalte bzw anschalte den Status ja ändern und an die Activity zurückgeben.Was muss ich tun?
Danke!Gruß
M3doXX
-
Hallo zusammen,
meine App ist nur mit Internet Zugang zu benutzen. Das heißt die App soll eigentlich ständig testen, ob man mit dem Internet verbunden ist.
Ich habe schon eine Methode die erfolgreich testet, ob eine Verbindung besteht.
Wenn die Verbindung nicht besteht, soll er so lange einen ProgressDialog anzeigen, bis die Verbindung besteht.
Es geht mir hier nicht um den ProgressDialog, sondern eher darum, wie die Methode aussehen muss, damit dauerhaft die Connection getestet wird.
Ich hab das Ganze mal mit einem Thread versucht, allerdings weiß ich nicht ob das die beste Möglichkeit ist und außerdem funktioniert es auch nicht
Hier mal der Code:Java
Alles anzeigenpublic void ConnectionTest(){ if (isInternetOn() == false){ thread= new Thread(){ @Override public void run(){ try { synchronized(this){ wait(8000); ConnectionTest(); if (isInternetOn() == true){ System.out.println("läuft Thread Ende"); liveAccess(); } } } catch(InterruptedException ex){ } } };} } public final boolean isInternetOn() { ConnectivityManager connec = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); // ARE WE CONNECTED TO THE NET if ( connec.getNetworkInfo(0).getState() == NetworkInfo.State.CONNECTED || connec.getNetworkInfo(1).getState() == NetworkInfo.State.CONNECTED ) { //System.out.println("läuft"); return true; } else if ( connec.getNetworkInfo(0).getState() == NetworkInfo.State.DISCONNECTED || connec.getNetworkInfo(1).getState() == NetworkInfo.State.DISCONNECTED ) { //System.out.println("läuft nicht"); return false; } return false; }
In der onCreate() der main-Activity wird ConnectionTest() aufgerufen.
Jemand eine Idee warum das nicht funktioniert, oder wie man das anders lösen kann?
Bin für jede Hilfe dankbar!Gruß
M3doXX
-
Hallo allezusammen,
ich habe folgendes Problem:
Ich habe eine Activity, die Informationen anzeigt. In der Activity gibt es eine Methode update(), die diese Informationen aktualisiert. Die Informationen kommen aus einer MySQL DB.
Dann habe ich nun noch einen Service, der über die Activity gestartet wird. Der Service soll in festen Intervallen die update() Methode der Activity aufrufen und wenn sich eine Variable ändert, dann soll er eine Nachricht in der Statusbar ausgeben. Wie kann ich nun die update() Methode im Service aufrufen?
Ich bin bei google nicht fündig geworden.
Besten Dank im VorrausmfG
M3doXX
-
Das es den Quellcode dort gibt hatte ich nicht gesehen
Es funktioniert jetzt soweit!
Allerdings hab ich jetzt ein neues Problem. Undzwar funktioniert das Activity öffnen, aber wenn ich einen AlertDialog öffnen möchte, dann kriege ich tausend Fehlermeldungen.
Wenn ich die Activity öffne, dann benutze ich diese Methode:Javapublic void startChildActivity(String Id, Intent intent) { Window window = getLocalActivityManager().startActivity(Id,intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)); if (window != null) { mIdList.add(Id); setContentView(window.getDecorView()); } }
Jemand eine Idee wie ich das für einen AlertDialog umschreiben muss, oder woran es sonst liegen könnte?
Weil wenn ich einen AlertDialog benutze, brauche ich ja kein Intent.
Hier noch die Fehlermeldungen:Zitat09-12 17:14:15.859: E/AndroidRuntime(18932): FATAL EXCEPTION: main
09-12 17:14:15.859: E/AndroidRuntime(18932): android.view.WindowManager$BadTokenException: Unable to add window -- token android.app.LocalActivityManager$LocalActivityRecord@40536de0 is not valid; is your activity running?
09-12 17:14:15.859: E/AndroidRuntime(18932): at android.view.ViewRoot.setView(ViewRoot.java:527)
09-12 17:14:15.859: E/AndroidRuntime(18932): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:177)
09-12 17:14:15.859: E/AndroidRuntime(18932): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91)
09-12 17:14:15.859: E/AndroidRuntime(18932): at android.view.Window$LocalWindowManager.addView(Window.java:424)
09-12 17:14:15.859: E/AndroidRuntime(18932): at android.app.Dialog.show(Dialog.java:241)
09-12 17:14:15.859: E/AndroidRuntime(18932): at spielesammlung.glandorf.Category$2.onItemLongClick(Category.java:124)
09-12 17:14:15.859: E/AndroidRuntime(18932): at android.widget.AbsListView.performLongPress(AbsListView.java:1869)
09-12 17:14:15.859: E/AndroidRuntime(18932): at android.widget.AbsListView.access$600(AbsListView.java:74)
09-12 17:14:15.859: E/AndroidRuntime(18932): at android.widget.AbsListView$CheckForLongPress.run(AbsListView.java:1827)
09-12 17:14:15.859: E/AndroidRuntime(18932): at android.os.Handler.handleCallback(Handler.java:587)
09-12 17:14:15.859: E/AndroidRuntime(18932): at android.os.Handler.dispatchMessage(Handler.java:92)
09-12 17:14:15.859: E/AndroidRuntime(18932): at android.os.Looper.loop(Looper.java:123)
09-12 17:14:15.859: E/AndroidRuntime(18932): at android.app.ActivityThread.main(ActivityThread.java:3683)
09-12 17:14:15.859: E/AndroidRuntime(18932): at java.lang.reflect.Method.invokeNative(Native Method)
09-12 17:14:15.859: E/AndroidRuntime(18932): at java.lang.reflect.Method.invoke(Method.java:507)
09-12 17:14:15.859: E/AndroidRuntime(18932): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
09-12 17:14:15.859: E/AndroidRuntime(18932): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
09-12 17:14:15.859: E/AndroidRuntime(18932): at dalvik.system.NativeStart.main(Native Method)Gruß
M3doXX
-
Kann mir keiner sagen wo die einzelnen Codeschnipsel aus dem Tutorial hingehören?
Wenn ich das Problem gelöst habe, ist meine erste App fertig, aber blick da nicht ganz durch und verzweifle hier gerade
Wär super wenn mir irgendjemand helfen könnte!!!
GrußM3doXX