0 Uhr Problem und public TextView

  • Antworten:3
superSharp
  • Forum-Beiträge: 89

25.10.2013, 16:55:38 via Website

Hi Android Community,

in meinem aktuellen Projekt ist es möglich mit zwei TimePickern Uhrzeiten zu setzen, diese TimePicker haben die Eigenschaft setIs24HourView auf true. Ich berechne dann die Zeitdifferenz aus der aktuellen Zeit und der durch den TimePicker eingegebenen. Wenn ich z.B. 0:54 Uhr im TimePicker anwähle dann würde als Ergebnis eine negative Stundenzahl herauskommen sofern die aktuelle Stunde größer 0 ist. Ich möchte diese 0 aber wie 25 Uhr behandeln, leider bin ich noch nicht ganz dahinter gestiegen wie ich das Code-technisch umsetzen kann. Hat hier wer eine Idee?

Zweite Frage:

ich möchte meine Buttons, TextViews und TimePicker global deklarieren. Wenn ich sie als public static deklariere, meckert das "findViewById", sobald ich es nur public final setze, stürzt mein Programm ab:


10-25 16:42:13.145 12530-12530/com.example.testapplicationproject E/AndroidRuntime﹕ FATAL EXCEPTION: main
java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.testapplicationproject/com.example.testapplicationproject.MainActivity}: java.lang.NullPointerException
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2255)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2389)
at android.app.ActivityThread.access$600(ActivityThread.java:153)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1269)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5289)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:525)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:739)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:555)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException
at android.app.Activity.findViewById(Activity.java:1853)
at com.example.testapplicationproject.MainActivity.<init>(MainActivity.java:24)
at java.lang.Class.newInstanceImpl(Native Method)
at java.lang.Class.newInstance(Class.java:1130)
at android.app.Instrumentation.newActivity(Instrumentation.java:1061)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2246)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2389)
            at android.app.ActivityThread.access$600(ActivityThread.java:153)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1269)
            at android.os.Handler.dispatchMessage(Handler.java:99)
            at android.os.Looper.loop(Looper.java:137)
            at android.app.ActivityThread.main(ActivityThread.java:5289)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:525)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:739)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:555)
            at dalvik.system.NativeStart.main(Native Method)

Bekomm ich die Objekte irgendwie global deklariert?

— geändert am 25.10.2013, 16:55:59

Antworten
impjor
  • Forum-Beiträge: 1.793

25.10.2013, 17:19:45 via App

Zur ersten Frage: Mach einfach deine normale Rechnung, und wenn diese negativ ist addiere zur ersten Zahl 24h und führe die Rechnung nochmals durch.
Zur zweiten Frage: Du könntest sie static deklarieren, aber warum solltest du? Auch verstehe ich nicht, warum sie unbedingt final sein müssen? Zur Erläuterung: findViewById erst aufrufen, nachdem man mittels setContentView ein Layout gesetzt hat.

LG

Liebe Grüße impjor.

Für ein gutes Miteinander: Unsere Regeln
Apps für jeden Einsatzzweck
Stellt eure App vor!

Antworten
superSharp
  • Forum-Beiträge: 89

25.10.2013, 17:45:04 via Website

Die Objekte sollen über dem onCreate() deklariert werden. Wenn ich sie static setze, gibts bei "findViewById" einen fehler und final brauch ich damit ich sie in einer anderen Funktion benutzen kann (setText z.B.). Leider kann ich im globalen Bereich auch kein setContentView() machen.

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

25.10.2013, 20:06:27 via Website

Dann solltest du die Variable oben deklarieren aber in der onCreate setzen.

1TextView txtView;
2
3@Override
4public void onCreate(Bundle savedInstanceState) {
5super.onCreate(savedInstanceState);
6setContentView(R.layout.main);
7
8txtView =(TextView)findViewById(R.Id.txtView);
9
10//Dann weiterer Code zb.
11txtView.setText("Uhrzeit ist 20:07 Uhr MESZ");
12
13
14 }

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten