Systemsprache auslesen?

  • Antworten:31
ExKcir
  • Forum-Beiträge: 115

18.08.2012, 16:31:29 via Website

Hallo,
ich habe schon wieder ein paar Probleme :D


1.
Da ich meine App gerne mehrsprachig machen will, würde ich gerne die Systemsprache auslesen lassen.
Aber leider habe ich bei Google nichts finden können wie man das macht.

2. Ich will eine Funktion machen die beim Start der App ausgeführt wird, gewisse Dinge macht (wie z.B inhalte einer Variable in einen Textview ausgeben) und wenn sie alles Ausgeführt hat wieder von neuem Anfängt.
Aber ich will das sie nebeibei läuft.
Kann mir vielleicht jemand sagen wie man das macht oder mir ein paar Links geben?

3. Leider habe ich auf meinen Thread betreffent dem Automatischen scrollen eines Scrollviews keine Antwort bekommen
Falls mir da jemand der das hier liest helfen kann währe mir sehr geholfen :)


Vielen Dank bereits im Vorraus!!!

Antworten
Gelöschter Account
  • Forum-Beiträge: 694

18.08.2012, 17:16:39 via Website

Zu 1.): Locale.getDefault() und weitere statische Methoden.

ABER. Das Konzept der Mehrsprachigkeit ist in Android komplett vorhanden. Dazu musst Du normalerweise keine Locale abfragen. Es sei denn die Texte kommen aus einer Datenbank oder werden von einer sprachspezifischen Quelle gelesen. Texte in einer App werden in den Ressource Ordnern nach Sprachen sortiert:

Supporting different languages

Zu 2.): Bitte näher spezifizieren. Was verstehst Du unter "nebenbei" im Zusammenhang mit "Variable in einen Textview ausgeben"? Beides widerspricht sich. "Nebenbei" bedeutet "muss nicht unbedingt sichtbar sein". Soll ein Timer permanent etwas machen und, sollte eine Activity/Fragment sichtbar sein, dies anzeigen? Was soll passieren wenn Activity/Fragment nicht sichtbar sind?

— geändert am 18.08.2012, 17:19:09

Antworten
ExKcir
  • Forum-Beiträge: 115

18.08.2012, 17:27:22 via Website

Harald Wilhelm
Zu 1.): Locale.getDefault() und weitere statische Methoden.

ABER. Das Konzept der Mehrsprachigkeit ist in Android komplett vorhanden. Dazu musst Du normalerweise keine Locale abfragen. Es sei denn die Texte kommen aus einer Datenbank oder werden von einer sprachspezifischen Quelle gelesen. Texte in einer App werden in den Ressource Ordnern nach Sprachen sortiert:

Supporting different languages

Zu 2.): Bitte näher spezifizieren. Was verstehst Du unter "nebenbei" im Zusammenhang mit "Variable in einen Textview ausgeben"? Beides widerspricht sich. "Nebenbei" bedeutet "muss nicht unbedingt sichtbar sein". Soll ein Timer permanent etwas machen und, sollte eine Activity/Fragment sichtbar sein, dies anzeigen? Was soll passieren wenn Activity/Fragment nicht sichtbar sind?

Zu 1:
Ja das mit dem Ressource Ordnern hab ich schon gelesen, aber das was ich ausgeben will ist nicht in einer resource datei gespeichert (Ja ich weiß man sollte es eher anders amchen, aber ich tue mir so einfach leichter)

zu 2:
Also soweit ich gelernt habe läuft das Programm/die app ja alle befehle, anweisungen,etc von oben nach unten durch.
Wenn ich jz z.B eine endlosschleife mache mit z.B while(a!=1) und das a nie verändere geht das Programm/die App ja nie aus der schleife raus und alles was nach dem while kommt wird nie ausgeführt oder? (So habe ich es halt bis jz immer gelernt)

Aber ich will jetzt so eine Endlosschleife starten wenn das Programm startet und dann einfach die Endosschleife endlos laufen lassen aber währenddessen auch andere Dinge ausführen lassen.

Sry falls ich scheiße labbere, aber ich habe früher nur C & C++ gelernt und da haben wir sowas wie ich jz brauche nie gebraucht und darum weiß ich das jz nicht so genau.....

Antworten
Maximilian O
  • Forum-Beiträge: 990

18.08.2012, 17:48:03 via App

Hallo,
zu 1.) Auch wenn du dich damit leichter tust, wirst du es später mit Sicherheit bereuen. Lagere doch einfach alles aus, so hat es gleich Hand und Fuß.

zu 2.) Du musst einen neuen Thread starten, welcher nicht deinen Hauptthread blockiert. Entweder mittels einem einfachen Thread, oder einem Service (für längere Intervalle geeignet).

Liebe Grüße Maximilian

Vergiss nie wieder Geburtstage, oder viel schlimmer, deinen Hochzeitstag - Birthdays Download

Antworten
ExKcir
  • Forum-Beiträge: 115

18.08.2012, 21:07:00 via Website

Danke, das war es was ich gesucht habe.
Ich habe jetzt mithilfe eines Video Tutorials versucht einen Thread zu starten der langsam eine int variable hochzählt und in einem TextView ausgibt.
Aber irgendwie tut sich nichts :(

habe ich was falsch gemacht?
1int test = 0;
2
3
4
5 @Override
6 public void onCreate(Bundle savedInstanceState) {
7 super.onCreate(savedInstanceState);
8 setContentView(R.layout.main);
9 final TextView Tv = (TextView) findViewById(R.id.textView1);
10 final Thread MainLoop = new Thread()
11 {
12 public void MainLoop()
13 {
14 try{
15 boolean a = true;
16 while(a)
17 {
18 test++;
19 Tv.setText(test);
20 sleep(1000);
21 }
22
23 } catch(InterruptedException e){
24 e.printStackTrace();
25 }finally{
26
27 }
28 }
29 };
30
31
32 MainLoop.start();

Antworten
Markus B.
  • Forum-Beiträge: 636

18.08.2012, 22:32:41 via Website

ExKcir

Antworten
ExKcir
  • Forum-Beiträge: 115

18.08.2012, 23:26:57 via Website

Oje....

Hm, ich habe mir das mal angeschaut, abe rich checks nicht ganz :(
Und was ist beim TextView falsch?
Meintest du das ich appendText nehmen soll?
Wenn ja:
Wie kann ich damit den inhalt meiner int Variable ausgeben?

Antworten
Markus B.
  • Forum-Beiträge: 636

19.08.2012, 00:15:09 via Website

Hi,
nicht immer gleich nach der ersten Antwort aufhören zu lesen :)
Die Zweite ist viel interessanter.

Gruß,
Markus

ExKcir

Antworten
ExKcir
  • Forum-Beiträge: 115

19.08.2012, 18:10:45 via Website

Hm, ich glaube ich check das nicht ganz :(

Einen Thread zu machen der die int variable hochzählt, das habe ich mal geschaft (glaube ich).
Aber immer wenn ich den Inhalt der variable über ein TextView ausgeben will stürtzt die app ab.
Kann mir jemand sagen an was das liegt?

Den letzten Link habe ich mir auch angeschaut, habe aber nicht ganz verstanden für was das jetzt ist :(

Antworten
Maximilian O
  • Forum-Beiträge: 990

19.08.2012, 22:11:04 via App

Deine App läuft ja in einem anderen Thread, in welchem alle UI Elemente (auch deine TextView) gemanaged werden. Nun kannst du nicht einfach aus deinem anderen Thread auf deine TextView zugreifen.
Du musst das ganze im "UIThread" machen.
Google einfach mal nach runOnUiThread(), sind nur wenige Zeilen.

Liebe Grüße Maximilian

//edit: Bitte benutze doch mal das Logcat, hätte auch diese Frage erspart.

— geändert am 19.08.2012, 22:12:08

Vergiss nie wieder Geburtstage, oder viel schlimmer, deinen Hochzeitstag - Birthdays Download

Antworten
ExKcir
  • Forum-Beiträge: 115

19.08.2012, 23:46:32 via Website

Ok, nun ist es 100% tig sicher:
ICH BIN ZU BLÖD UM DAS ZUM LAUFEN ZU BRINGEN :(

ich habs jetzt mit runOnUiThread() gemacht, aber irgendwie stürtzt das immer noch ab :(

Könnte mir das vielleicht einer machen? (also das das über den UIThread gemacht wird)
Ich will nur den Inhalt der int variable "Test" im TextView Tv ausgeben.

Es währe mir damit wirklich riesig geholfen, den ich glaube ich schaff das nicht , ich bin einfach zu blöd ^^

— geändert am 19.08.2012, 23:47:15

Antworten
André
  • Forum-Beiträge: 77

20.08.2012, 09:45:02 via Website

ExKcir
aber irgendwie stürtzt das immer noch ab

Was ist das bitte für eine Aussage? So kann dir auch niemand helfen.

Antworten
ExKcir
  • Forum-Beiträge: 115

20.08.2012, 10:45:30 via Website

Wie vorher halt: Wenn ich den Inhalt der int Variable (die hochgezählt wird) im TextView ausgeben will stürtzt die App ab

Antworten
Carsten M.
  • Forum-Beiträge: 33.204

20.08.2012, 10:51:09 via App

ExKcir
Wie vorher halt: Wenn ich den Inhalt der int Variable (die hochgezählt wird) im TextView ausgeben will stürtzt die App ab
Logcat?

Herzliche Grüße

Carsten

Ich komm' mir langsam vor wie jemand, der ich bin // #cäthe

Antworten
ExKcir
  • Forum-Beiträge: 115

20.08.2012, 11:57:26 via Website

Activity Manager (278)
Activity pause timeout for HistoryRecord{40fed4c0 com.ExKcirApps.meineapp/.MainActivity}

und

ActivityManager(278)
Force finishing activity com.ExKcirApps.meineapp/.MainActivity

Sind das die richtigen?

btw. wo findet man die Logcat fehlermeldungen eigentlich normal?
Ich suche sie mir immer mit Systemtuner :D

— geändert am 20.08.2012, 11:59:13

Antworten
André
  • Forum-Beiträge: 77

20.08.2012, 12:04:18 via Website

Ich würde dir mal empfehlen, solche elementaren Anfängersachen im Emulator auszuprobieren. Dann siehst du das Logcat direkt im Eclipse und kannst direkt an die Stelle springen (und noch viel wichtiger: debuggen).

Ansonsten gibt es eine ganze Menge Apps die das Logcat auslesen, filtern, durchsuchen etc. können. Ich benutze aLogcat.

— geändert am 20.08.2012, 12:05:11

Antworten
ExKcir
  • Forum-Beiträge: 115

20.08.2012, 15:15:22 via Website

André
Ich würde dir mal empfehlen, solche elementaren Anfängersachen im Emulator auszuprobieren. Dann siehst du das Logcat direkt im Eclipse und kannst direkt an die Stelle springen (und noch viel wichtiger: debuggen).

Ansonsten gibt es eine ganze Menge Apps die das Logcat auslesen, filtern, durchsuchen etc. können. Ich benutze aLogcat.
Naja, mit dem Emulator habe ich in letzter zeit so meine schwirigkeiten gehabt...
Also ich bleibe dann bei System Tuner (Bleibt für mich die beste App die es gibt *.*)

Antworten
Markus B.
  • Forum-Beiträge: 636

20.08.2012, 15:18:26 via Website

ExKcir
André
Ich würde dir mal empfehlen, solche elementaren Anfängersachen im Emulator auszuprobieren. Dann siehst du das Logcat direkt im Eclipse und kannst direkt an die Stelle springen (und noch viel wichtiger: debuggen).

Ansonsten gibt es eine ganze Menge Apps die das Logcat auslesen, filtern, durchsuchen etc. können. Ich benutze aLogcat.
Naja, mit dem Emulator habe ich in letzter zeit so meine schwirigkeiten gehabt...
Also ich bleibe dann bei System Tuner (Bleibt für mich die beste App die es gibt *.*)

Hi ExKcir,
du gehst einfach zu oft deinen eigenen Weg und nimmst wenig von der Community an.
Du rennst so oft vor die Wand, denk mal drüber nach :) Soll jetzt nicht böse sein sondern einfach nur ein Hinweis.
Ganz am Rande ist das LogCat einfach das wichtigste wenn es um das Aufspüren von Fehlern geht aber du willst ja nicht.

Gruß,
Markus

Antworten
ExKcir
  • Forum-Beiträge: 115

20.08.2012, 15:42:50 via Website

Markus B.
ExKcir
André
Ich würde dir mal empfehlen, solche elementaren Anfängersachen im Emulator auszuprobieren. Dann siehst du das Logcat direkt im Eclipse und kannst direkt an die Stelle springen (und noch viel wichtiger: debuggen).

Ansonsten gibt es eine ganze Menge Apps die das Logcat auslesen, filtern, durchsuchen etc. können. Ich benutze aLogcat.
Naja, mit dem Emulator habe ich in letzter zeit so meine schwirigkeiten gehabt...
Also ich bleibe dann bei System Tuner (Bleibt für mich die beste App die es gibt *.*)

Hi ExKcir,
du gehst einfach zu oft deinen eigenen Weg und nimmst wenig von der Community an.
Du rennst so oft vor die Wand, denk mal drüber nach :) Soll jetzt nicht böse sein sondern einfach nur ein Hinweis.
Ganz am Rande ist das LogCat einfach das wichtigste wenn es um das Aufspüren von Fehlern geht aber du willst ja nicht.

Gruß,
Markus
Ja, das bezweifle ich nicht, aber wenn es mir weiterhilft nehme ich jeden rat an.
Aber was soll ich tun wenn ich den Emulator nicht benutzen kann weil er nicht startet?
Und System Tuner hat eine Funktion wo man LogCat nachrichten lesen kann, also warum eine andere App installieren?

Antworten
André
  • Forum-Beiträge: 77

20.08.2012, 15:51:36 via Website

ExKcir
Ja, das bezweifle ich nicht, aber wenn es mir weiterhilft nehme ich jeden rat an.
Aber was soll ich tun wenn ich den Emulator nicht benutzen kann weil er nicht startet?
Und System Tuner hat eine Funktion wo man LogCat nachrichten lesen kann, also warum eine andere App installieren?

Zunächst mal könntest du den Emulator richtig einrichten, damit er funktioniert. Alle anderen Android Entwickler schaffen das auch, kann also nicht so schwer sein. Und im Notfall gibt es im Netz dazu jede Menge Hilfestellungen.

Von System Tuner habe ich keine Ahnung, wenn das tatsächlich den kompletten Logcat für die betreffende Anwendung zeigen kann, wäre das auch völlig in Ordnung. Da du oben aber auf Nachfrage nicht mal annähernd ein Logcat produzieren konntest, gehe ich mal stark davon aus, dass das nicht der Fall ist.

Antworten
ExKcir
  • Forum-Beiträge: 115

20.08.2012, 16:01:24 via Website

Rafael K.
Am PC in Eclipse kann man doch viel besser mit dem Logcat arbeiten.
Über eine App ist das doch mega umständlich.

Wo sieht man da die meldungen in Eclipse?

Antworten
ExKcir
  • Forum-Beiträge: 115

20.08.2012, 16:03:44 via Website

André
ExKcir
Ja, das bezweifle ich nicht, aber wenn es mir weiterhilft nehme ich jeden rat an.
Aber was soll ich tun wenn ich den Emulator nicht benutzen kann weil er nicht startet?
Und System Tuner hat eine Funktion wo man LogCat nachrichten lesen kann, also warum eine andere App installieren?

Zunächst mal könntest du den Emulator richtig einrichten, damit er funktioniert. Alle anderen Android Entwickler schaffen das auch, kann also nicht so schwer sein. Und im Notfall gibt es im Netz dazu jede Menge Hilfestellungen.

Von System Tuner habe ich keine Ahnung, wenn das tatsächlich den kompletten Logcat für die betreffende Anwendung zeigen kann, wäre das auch völlig in Ordnung. Da du oben aber auf Nachfrage nicht mal annähernd ein Logcat produzieren konntest, gehe ich mal stark davon aus, dass das nicht der Fall ist.

Er ist bzw. war richtig eingestellt, ich habe ihn ja sicher schon 20 mal gestartet, doch eines tages hat er nicht mehr aufgehört zu laden beim Android schriftzug....
Und dann hab ich es über das handy probiert und ich fand es viel einfacher.

Also war das vorhin nicht der ganze Logcat?
das wusste ich nicht....

Antworten
Rafael K.
  • Forum-Beiträge: 2.359

20.08.2012, 16:11:24 via Website

ExKcir
Rafael K.
Am PC in Eclipse kann man doch viel besser mit dem Logcat arbeiten.
Über eine App ist das doch mega umständlich.

Wo sieht man da die meldungen in Eclipse?
https://www.google.com/search?q=eclipse+logcat&hl=de
--> führt zu -->
http://stackoverflow.com/questions/3280051/how-to-enable-logcat-console-in-eclipse-for-android


ExKcir
Er ist bzw. war richtig eingestellt, ich habe ihn ja sicher schon 20 mal gestartet, doch eines tages hat er nicht mehr aufgehört zu laden beim Android schriftzug....
Wie lange hast du gewartet? Der braucht seine Zeit um zu starten

— geändert am 20.08.2012, 16:12:17

Antworten
ExKcir
  • Forum-Beiträge: 115

20.08.2012, 17:17:55 via Website

Rafael K.
ExKcir
Rafael K.
Am PC in Eclipse kann man doch viel besser mit dem Logcat arbeiten.
Über eine App ist das doch mega umständlich.

Wo sieht man da die meldungen in Eclipse?
https://www.google.com/search?q=eclipse+logcat&hl=de
--> führt zu -->
http://stackoverflow.com/questions/3280051/how-to-enable-logcat-console-in-eclipse-for-android


ExKcir
Er ist bzw. war richtig eingestellt, ich habe ihn ja sicher schon 20 mal gestartet, doch eines tages hat er nicht mehr aufgehört zu laden beim Android schriftzug....
Wie lange hast du gewartet? Der braucht seine Zeit um zu starten
Danke.
Ich habe 3 - 4 Stunden gewartet

Antworten
Gelöschter Account
  • Forum-Beiträge: 5.136

20.08.2012, 17:54:15 via Website

Es ist doch völlig egal ob ich im Emulator teste oder auf einem realen Device, das Logcat ist in beiden Fällen einwandfrei in Eclipse anzeigbar und wunderbar zu filtern. In sofern kann ich das Problem hier nicht nachvollziehen. Das Logcat in Eclipse ist mit zwei Mausklicks erreicht und die Bedienung intuitiv. Voraussetzung sind lediglich die entsprechenden USB Treiber die für die ADB installiert sein müssen.

Für alle diese Dinge gibt es auf developer.android.com passende Anleitungen. Wenn nicht dort, dann Tante Google fragen.

Ohne Logcat, was die mit an Sicherheit grenzender Wahrscheinlichkeit 90% alll Deiner Fragen beantworten würde, wird Dir hier kaum jemand helfen, bzw. helfen können ExKcir.

lg Voss

Antworten
ExKcir
  • Forum-Beiträge: 115

20.08.2012, 18:52:38 via Website

Ich hab mir jetzt das Logcat angesehen und hab den Fehler wirklich gleich gefunden :D

Ich wollte mit setText ja den inhalt der Variable ausgeben.
Aber irgendwie habe ich das falsch gemacht.
Ich dachte es gehört so:
1Tv.setText(Test)
Da habe ich mcih aber geirrt....

Ich habs jetzt so gemacht und es ging:
1Tv.setText("" + Test)

Wie gibt man das jetzt richtig aus?
Stimmt es wie ich es jetzt habe oder macht man das anders?

Antworten
San Blarnoi
  • Forum-Beiträge: 2.545

20.08.2012, 19:03:33 via Website

Es ist doch völlig egal ob ich im Emulator teste oder auf einem realen Device, das Logcat ist in beiden Fällen einwandfrei in Eclipse anzeigbar und wunderbar zu filtern.

Hehe, ich dachte schon, das man mit Eclipse auch direkt am Handy testen kann, wird gar nicht mehr erwähnt ;)

Antworten
Haakon T.
  • Forum-Beiträge: 375

20.08.2012, 19:13:31 via Website

ExKcir
Wie gibt man das jetzt richtig aus?
Stimmt es wie ich es jetzt habe oder macht man das anders?
Wirf einfach mal einen Blick in die dazugehörige API Referenz.

Antworten
Gelöschter Account
  • Forum-Beiträge: 694

20.08.2012, 20:40:25 via App

ExKcir
Tv.setText("" + Test)

Wie der Name schon sagt soll ein TEXT ausgegeben werden. Deine Test Variable enthält aber keinen Text sondern ein INT.

Das ""+Test ist ein Sonderfall und führt unter der Haube eine Konvertierung von INT nach STRING durch. Das ist ein Java Ding. Du hättest auch "String.valueOf(Test)" schreiben können.

Antworten
ExKcir
  • Forum-Beiträge: 115

20.08.2012, 20:58:03 via Website

Harald Wilhelm
ExKcir
Tv.setText("" + Test)

Wie der Name schon sagt soll ein TEXT ausgegeben werden. Deine Test Variable enthält aber keinen Text sondern ein INT.

Das ""+Test ist ein Sonderfall und führt unter der Haube eine Konvertierung von INT nach STRING durch. Das ist ein Java Ding. Du hättest auch "String.valueOf(Test)" schreiben können.
Ahh, danke :)

Ich habe jetzt ein wenig rumprobiert und wollte kurz gesagt ein script schreiben das im Hintergrund (also mit einem Thread) eine int hochzählt und diese in gewissen zeitabständen im textView ausgibt, vorher habe ich es im textview ausgeben lassen wenn ich auf einen Button drücke.

Als erstes habe ich natürlich versucht das textView gleich nachdem die int erhöht wurde upzudaten, aber dann ist die App immer abgestürtzt.
Ich bin mir nicht ganz sicher wieso, aber ich wollte dann mal das mit dem verzögerten aktualisieren verwenden, was Markus B. vorher mal verlinkt hat.

Aber irgendwie stürtzt die App trotzdem ab wenn ich den Inhalt der int Variable im TextView ausgeben will, obwohl ich es im OnUiThread ändere.
Im LogCat steht was von einer NullPointerException, ich weiß aber nicht warum diese ausgelöst wird :(

LogCat:
08-20 20:37:09.408: E/AndroidRuntime(11838): FATAL EXCEPTION: main
08-20 20:37:09.408: E/AndroidRuntime(11838): java.lang.NullPointerException
08-20 20:37:09.408: E/AndroidRuntime(11838): at com.ExKcirApps.App.MainActivity$1$1.run(MainActivity.java:92)
08-20 20:37:09.408: E/AndroidRuntime(11838): at android.app.Activity.runOnUiThread(Activity.java:3878)
08-20 20:37:09.408: E/AndroidRuntime(11838): at com.ExKcirApps.App.MainActivity$1.run(MainActivity.java:89)
08-20 20:37:09.408: E/AndroidRuntime(11838): at android.os.Handler.handleCallback(Handler.java:587)
08-20 20:37:09.408: E/AndroidRuntime(11838): at android.os.Handler.dispatchMessage(Handler.java:92)
08-20 20:37:09.408: E/AndroidRuntime(11838): at android.os.Looper.loop(Looper.java:150)
08-20 20:37:09.408: E/AndroidRuntime(11838): at android.app.ActivityThread.main(ActivityThread.java:4293)
08-20 20:37:09.408: E/AndroidRuntime(11838): at java.lang.reflect.Method.invokeNative(Native Method)
08-20 20:37:09.408: E/AndroidRuntime(11838): at java.lang.reflect.Method.invoke(Method.java:507)
08-20 20:37:09.408: E/AndroidRuntime(11838): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:849)
08-20 20:37:09.408: E/AndroidRuntime(11838): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:607)
08-20 20:37:09.408: E/AndroidRuntime(11838): at dalvik.system.NativeStart.main(Native Method)

Kann mir damit wer sagen was ich falsch gemacht habe?
Oder soll ich auch den Code posten?

— geändert am 20.08.2012, 20:58:35

Antworten
Gelöschter Account
  • Forum-Beiträge: 694

20.08.2012, 23:26:39 via Website

Im Eclipse Debugger anwerfen, Breakpoint auf Zeile MainActivity.java:89 setzen, Zeile für Zeile ausführen und beobachten. Wenn Du etwas nicht findest --> googeln, wenn Du etwas nicht verstehst --> nachlesen, versuch mal diesen Schritt selbst zu lösen.

— geändert am 20.08.2012, 23:27:21

ExKcir

Antworten