TextView, force close

  • Antworten:14
  • Bentwortet
Aeefire
  • Forum-Beiträge: 172

01.05.2011, 18:16:38 via Website

Servus! ich wollt mir ne kleine App bauen bei der man einfach nur ne zufällige Zahl rausbekommt (man muss vorher obere und untere Grenze eingeben).
Ich hab vor kurzem was bei den letzten zwei Zeilen (dieses ausschnitts) zurück geändert da ich was versucht hab, nun bekomm ich aber immer forcecloses und habe kA warum.
1if (v == randomButton)
2 {
3
4
5 int START = lowerint;
6 int END = upperint;
7
8 Random random = new Random();
9 int randomNumberInt = showRandomInteger(START, END, random);
10 String randomNumber = new Integer((randomNumberInt)).toString();
11
12 String RN = getResources().getString(R.string.yourrandom, randomNumber);
13 Toast.makeText(this, RN, Toast.LENGTH_LONG).show();
14
15 TextView showRand = (TextView) findViewById(R.string.randomshow);
16 showRand.setText(randomNumber);
17 }
showRandomInteger() hat schon funktioniert, daran kanns nicht liegen, der Fehler muss lustigerweise in den letzten Zwei Zeilen liegen!
die Strings-datei dazu:
1<?xml version="1.0" encoding="utf-8"?>
2<resources>
3 <string name="hello">Hello World, TinyRandomNumberActivity!</string>
4 <string name="app_name">Tiny Random Number</string>
5 <string name="enter_your_name">Enter the range, in which you\'d like your random number!</string>
6 <string name="random_button">Show random number!</string>
7 <string name="error_value_missing">Please enter the values.</string>
8 <string name="error_ok">OK</string>
9 <string name="yourrandom" >Your random number is: %s !</string>
10 <string name="bottom_range">Lower limit:</string>
11 <string name="top_range">Upper limit:</string>
12 <string name="randomshow"></string>
13</resources>
und der Ausschnitt aus main.xml
1<TextView android:layout_width="fill_parent"
2 android:layout_marginTop="20dp"
3 android:layout_height="wrap_content"
4 android:id="@+id/randomshow"
5 android:text="@string/randomshow">
6 </TextView>
hat jemand nen schimmer wieso es nicht klappt??

— geändert am 01.05.2011, 18:17:21

Antworten
Aeefire
  • Forum-Beiträge: 172

01.05.2011, 18:19:51 via Website

achja hier logcat:

105-01 16:19:05.978: WARN/dalvikvm(218): threadid=3: thread exiting with uncaught exception (group=0x4001b188)
205-01 16:19:05.989: ERROR/AndroidRuntime(218): Uncaught handler: thread main exiting due to uncaught exception
305-01 16:19:06.008: ERROR/AndroidRuntime(218): java.lang.NullPointerException
405-01 16:19:06.008: ERROR/AndroidRuntime(218): at de.tiny.randomnumber.TinyRandomNumberActivity.onClick(TinyRandomNumberActivity.java:60)
505-01 16:19:06.008: ERROR/AndroidRuntime(218): at android.view.View.performClick(View.java:2364)
605-01 16:19:06.008: ERROR/AndroidRuntime(218): at android.view.View.onTouchEvent(View.java:4179)
705-01 16:19:06.008: ERROR/AndroidRuntime(218): at android.widget.TextView.onTouchEvent(TextView.java:6541)
805-01 16:19:06.008: ERROR/AndroidRuntime(218): at android.view.View.dispatchTouchEvent(View.java:3709)
905-01 16:19:06.008: ERROR/AndroidRuntime(218): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
1005-01 16:19:06.008: ERROR/AndroidRuntime(218): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
1105-01 16:19:06.008: ERROR/AndroidRuntime(218): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
1205-01 16:19:06.008: ERROR/AndroidRuntime(218): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
1305-01 16:19:06.008: ERROR/AndroidRuntime(218): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
1405-01 16:19:06.008: ERROR/AndroidRuntime(218): at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1659)
1505-01 16:19:06.008: ERROR/AndroidRuntime(218): at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1107)
1605-01 16:19:06.008: ERROR/AndroidRuntime(218): at android.app.Activity.dispatchTouchEvent(Activity.java:2061)
1705-01 16:19:06.008: ERROR/AndroidRuntime(218): at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1643)
1805-01 16:19:06.008: ERROR/AndroidRuntime(218): at android.view.ViewRoot.handleMessage(ViewRoot.java:1691)
1905-01 16:19:06.008: ERROR/AndroidRuntime(218): at android.os.Handler.dispatchMessage(Handler.java:99)
2005-01 16:19:06.008: ERROR/AndroidRuntime(218): at android.os.Looper.loop(Looper.java:123)
2105-01 16:19:06.008: ERROR/AndroidRuntime(218): at android.app.ActivityThread.main(ActivityThread.java:4363)
2205-01 16:19:06.008: ERROR/AndroidRuntime(218): at java.lang.reflect.Method.invokeNative(Native Method)
2305-01 16:19:06.008: ERROR/AndroidRuntime(218): at java.lang.reflect.Method.invoke(Method.java:521)
2405-01 16:19:06.008: ERROR/AndroidRuntime(218): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
2505-01 16:19:06.008: ERROR/AndroidRuntime(218): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
2605-01 16:19:06.008: ERROR/AndroidRuntime(218): at dalvik.system.NativeStart.main(Native Method)

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

01.05.2011, 18:26:46 via Website

Er schreibt Dir doch raus ... Nullpointer exception in Zeile 60 ... ?? Wo ist das Problem ??

lg Voss

Antworten
Aeefire
  • Forum-Beiträge: 172

01.05.2011, 18:28:57 via Website

Jörg V.
Er schreibt Dir doch raus ... Nullpointer exception in Zeile 60 ... ?? Wo ist das Problem ??

Ich versteh nicht ganz worans liegt... (man beachte: das ist meine erste "Trainingsapp" -- bitte um Nachsicht :)


edit: sorry kann geclosed werden ...
dass bei findViewBy[b]Id[/code] auch R.[b]id.randomshow und nicht string reingehört, sollte eigentlich klar sein xD tschuldige nochmal.. habs nur ne stunde lang nicht gefunden und bin etwas verzweifelt gewesen :PP

1TextView showRand = (TextView) findViewById(R.id.randomshow);
so ist's richtig!

— geändert am 01.05.2011, 18:35:48

Antworten
Maximilian O
  • Forum-Beiträge: 990

01.05.2011, 18:39:06 via Website

Debugs dochmal. Wenn du eclipse benutzt, dann einfach mal an eine Zeile vorne Doppelklicken um einen Breakpoint zu setzen. Schau dann mal im Debugmodus ob da noch mehr steht.

Achja ein kleiner Tipp noch für deinen Code:
Das ist viel zu umständlich:
1String randomNumber = new Integer((randomNumberInt)).toString();

machs einfach so:
1String randomNumber = Integer.toString(randomInt);
Viel übersichtlicher :)

Nur so, für Variablen benutzt man nur Großbuchstaben, wenn es Konstanten sein sollen (meiner Ahnung nach). Wenn du das willst gut, sonst könnte es aber jemand falsch verstehen :)

MfG

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

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

01.05.2011, 18:39:55 via Website

Das ist das gute daran wenn man solche Fehler selber findet .. man macht den Fehler kein zweites Mal ;) Fein das Du selber darauf gekommen bist!

lg Voss

Antworten
Aeefire
  • Forum-Beiträge: 172

01.05.2011, 19:42:27 via Website

Falls ihr den YAAM-store verwendet, könnt ihr euch ja das Resultat meiner ersten kleinen App ansehen!

Bin immer empfänglich für Feedback ;)

Antworten
Ansgar M
  • Forum-Beiträge: 1.544

01.05.2011, 20:32:17 via Website

Aeefire
Bin immer empfänglich für Feedback ;)
Und hier ist welches.. :)
Hab mir die App mal angesehen. Funktioniert so, wie beschrieben..
Was man noch machen könnte, wäre zu prüfen, ob die erste Zahl auch kleiner ist, denn wenn nicht stürzt die App ab :) (Wenn beide gleich sind, klappt es, aber eine Info an den Nutzer, dass er immer dieselbe Zahl erhält wäre vielleicht auch nicht schlecht :wink: )
Außerdem könntest du im xml den inputType auf "number" setzen, dann zeigt es gleich die richtige Tastatur für Zahlen..
Lg Ansgar

— geändert am 01.05.2011, 20:33:24

Antworten
Aeefire
  • Forum-Beiträge: 172

02.05.2011, 17:22:46 via Website

Ansgar M
Aeefire
Bin immer empfänglich für Feedback ;)
Und hier ist welches.. :)
Hab mir die App mal angesehen. Funktioniert so, wie beschrieben..
Was man noch machen könnte, wäre zu prüfen, ob die erste Zahl auch kleiner ist, denn wenn nicht stürzt die App ab :) (Wenn beide gleich sind, klappt es, aber eine Info an den Nutzer, dass er immer dieselbe Zahl erhält wäre vielleicht auch nicht schlecht :wink: )
Außerdem könntest du im xml den inputType auf "number" setzen, dann zeigt es gleich die richtige Tastatur für Zahlen..
Lg Ansgar

ja den Namen vergessen, hehe... einfach nach "Tiny Random Number" suchen ;) ja danke, darauf bin ich heute schonmal aufmerksam geworden, genauso muss ich noch diverse Fehlermeldungen hinzufügen um die Programmabstürze zu verhindern.

Antworten
Ansgar M
  • Forum-Beiträge: 1.544

02.05.2011, 18:47:08 via Website

Und wenn du schon dabei bist,
gib mal eine Zahl ein, die größer als 2147483648 ist.. :grin:
Lg Ansgar

Antworten
Aeefire
  • Forum-Beiträge: 172

02.05.2011, 22:26:25 via Website

Ansgar M
Und wenn du schon dabei bist,
gib mal eine Zahl ein, die größer als 2147483648 ist.. :grin:
Lg Ansgar

wie ich das mit ner warnung belegen soll, hab ich kA^^ wie bekomm ich raus, was die maximale zahl ist? oder gibts sowas wie "if overflow" ? :P

Antworten
Ansgar M
  • Forum-Beiträge: 1.544

02.05.2011, 22:56:01 via App

Guck mal nach TRY - CATCH. Dann kannste die Exception fangen, die im Logcat steht..
Lg Ansgar

Antworten
Aeefire
  • Forum-Beiträge: 172

02.05.2011, 23:28:43 via Website

Ansgar M
Guck mal nach TRY - CATCH. Dann kannste die Exception fangen, die im Logcat steht..
Lg Ansgar

Werd ich mir ansehen, darüber hab ich definitiv schonmal was gelesen!

Weiters werd ich mich wohl in nächster Zeit drauf beschränken mir erstmal die Java "Basics" anzueignen und dann erst zu Android über zu gehen. Aber das war/ist mein erstes Projektchen, dass mit Sicherheit sehr spannend war - und ich bin mächtig stolz, dass es funktioniert ;)

Antworten
Ansgar M
  • Forum-Beiträge: 1.544

02.05.2011, 23:37:09 via App

Wenn du Englisch kannst, kann ich dir die Java Tutorial Videos von "thenewboston" empfehlen. Bis etwa Folge 50 ist es noch allgemein. Ist sehr leichtes Englisch und gut erklärt.
Lg Ansgar

— geändert am 02.05.2011, 23:37:20

Antworten
Aeefire
  • Forum-Beiträge: 172

03.05.2011, 15:38:44 via Website

Ansgar M
Wenn du Englisch kannst, kann ich dir die Java Tutorial Videos von "thenewboston" empfehlen. Bis etwa Folge 50 ist es noch allgemein. Ist sehr leichtes Englisch und gut erklärt.
Lg Ansgar

Etliche Jahre Englisch-Unterricht sollten es mir beigebracht haben ;) Ich werf mal den YouTube-Downloader an und sehs mir an! Danke für den Tipp!


edit: hab das ganze jetz in nen Try-Catch verpackt, jedoch nur mit einer exception-art, da das andere irgendwie nicht klappte, da man nicht 2 exceptions hintereinander "thrown" kann. gibts da ein workaround dazu? ich hab nichts passendes gefunden.

zurzeit siehts einfach so aus (nicht sehr schön, vielleicht sollt ich das in kleiner häppchen verpacken?)
1try{
2 EditText bottomRange = (EditText) findViewById(R.id.bottom_range);
3 int lowerint = Integer.parseInt(bottomRange.getText().toString());
4 EditText topRange = (EditText) findViewById(R.id.top_range);
5 int upperint = Integer.parseInt(topRange.getText().toString());
6
7
8 if (v == randomButton)
9 {
10
11
12 int START = lowerint;
13 int END = upperint;
14
15 Random random = new Random();
16 int randomNumberInt = showRandomInteger(START, END, random);
17 String randomNumber = new Integer((randomNumberInt)).toString();
18
19 String RN = getResources().getString(R.string.yourrandom, randomNumber);
20 Toast.makeText(this, RN, Toast.LENGTH_LONG).show();
21
22 TextView showRand = (TextView) findViewById(R.id.randomshow);
23 showRand.setText(randomNumber);
24
25 throw new NumberFormatException("NumberFormat-Fehler ist aufgetreten");
26
27
28 }
29 }
30 catch (NumberFormatException e){
31 new AlertDialog.Builder(this)
32 .setMessage("Following error : "+e.getMessage())
33 .setNeutralButton(R.string.error_ok, null)
34 .show();
35
36 }
btw. gibts wo ne liste mit exceptions? ich konnte nichts passendes finden :/

edit: was noch sehr komisch ist, er setzt mir lustigerweise den button-string der Error-message nicht auf die gewollte r.string.error_ok sondern auf r.string.yourrandom ... wieso ist ne gute frage :D

edit 3: wenn ich versuche mehrere verschiedene try-catches zu bauen, können die variablen auf einmal nichtmehr aufgelöst werden >.<

edit4: ich glaub langsam versteh ich das ganze (auch wenns irgendwie ohne thrown logischer wär für mich...) jedenfalls wird jetzt zumindest der richtige button ausgegeben, dennoch ist das nur ein workaround, denn ich will ja erreichen wenn diese VORDEFINIERTE (wie sie auch im logcat auftritt) exception NumberFormatException auftritt, dass sie diese Fehlermeldung ausgibt und nicht wenn die obergrenze eine maximalzahl überschreitet. sit das möglich?

der workaround sieht so aus
1if(upperint>=1000000000){
2 throw new NumberFormatException("NumberFormat-Fehler ist aufgetreten");
3 }

— geändert am 03.05.2011, 21:07:03

Antworten