Fehler im Code?

  • Antworten:128
  • Bentwortet
Tim B.
  • Forum-Beiträge: 101

09.12.2013, 20:29:30 via Website

Hallo,
also es geht darum: Meine App hat zwei EditText-felder und einen Button. Wenn man den Button klickt, soll das eingegebene als Variable gespeichert werden. Bis jetzt habe ich diesen Code (bis zum Button bin ich noch nicht):

1package com.timbremer.ggnauenvertretungsplan;
2
3import android.os.Bundle;
4import android.preference.PreferenceManager;
5import android.widget.Button;
6import android.widget.EditText;
7import android.widget.TextView;
8import android.app.Activity;
9import android.content.SharedPreferences;
10
11public class MainActivity extends Activity {
12
13 public EditText etusername;
14 public EditText etpassword;
15 public Button btlogin;
16
17
18 @Override
19
20
21 public void onCreate(Bundle savedInstanceState) {
22 super.onCreate(savedInstanceState);
23 setContentView(R.layout.activity_main);
24
25
26 SharedPreferences app_preferences =
27 PreferenceManager.getDefaultSharedPreferences(this);
28
29 getPreferences(MODE_PRIVATE).edit().putString("username",etusername).commit();
30
31 getPreferences(MODE_PRIVATE).edit().putString("password",etpassword).commit();
32 }
33
34
35
36
37}

Das, was fett geschrieben ist, ist von eclipse auch unterstrichen worden. Wenn ich mit der Maus drüber hovere, wird dieser Fehler gezeigt:

" The method putString(String, String) in the type SharedPreferences.Editor is not applicable for the arguments (String, EditText) "

Wo liegt der Fehler?

— geändert am 09.12.2013, 20:45:23

LG Optimus Me mit Root

Antworten
Michele
  • Forum-Beiträge: 1.525

09.12.2013, 20:55:29 via Website

Hallo.

Ab 2.3 nimmt man kein
1commit();
mehr.

Sondern
1apply();

Hast du mal angeklickt was Eclipse dir vorschlägt, was man ändern könnte?

Du musst erst dein EditText in einem String wandeln.

Also z.B
1etusername.toString();


LG

— geändert am 09.12.2013, 20:57:27

Antworten
Tim B.
  • Forum-Beiträge: 101

09.12.2013, 21:41:22 via App

danke für den Tipp, allerdings musste ich es nicht in einen String wandeln, ich habe einfach das eine EditText Feld von Password zu normal geändert.

LG Optimus Me mit Root

Antworten
impjor
  • Forum-Beiträge: 1.793

09.12.2013, 21:47:12 via App

Du kannst nicht einfach den gesamten EditText übergeben, macht ja auch keinen Sinn. Dieser "enthält" ja noch Position, Farbe, usw. Wichtig ist nur der Text, den du über EditText#getText().toString() bekommst.
Das hat mit Passwort nichts zu tun.

LG

Liebe Grüße impjor.

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

Antworten
Tim B.
  • Forum-Beiträge: 101

09.12.2013, 21:49:06 via App

aber als ich den typen geändert habe ging ja alles wieder.

LG Optimus Me mit Root

Antworten
Michele
  • Forum-Beiträge: 1.525

09.12.2013, 22:00:46 via Website

impjor
Was meinst du denn mit Typen ändern? In der xml? Das kann ich nicht glauben...oO
LG

Ich kann das auch nicht glauben, das es so einfach geht.


LG

Antworten
Tim B.
  • Forum-Beiträge: 101

09.12.2013, 22:06:50 via App

impjor
Was meinst du denn mit Typen ändern? In der xml? Das kann ich nicht glauben...oO
LG
ja, in der XML. Eclipse hatte mir das vorgeschlagen und dann ging es.
Nur nochmal zur Erklärung: Vorher war es eine Passwort-Eingabe-Box (Punkte statt Buchstaben) und jetzt ist es eine normale EditText.

LG Optimus Me mit Root

Antworten
Michele
  • Forum-Beiträge: 1.525

09.12.2013, 22:23:17 via Website

Zeige einfach nochmal dein Code, nachdem es ja nun Funktionieren soll.



LG

Antworten
Tim B.
  • Forum-Beiträge: 101

09.12.2013, 22:24:23 via App

Michele
Zeige einfach nochmal dein Code, nachdem es ja nun Funktionieren soll.



LG
mache ich morgen, Computer ist schon aus ;)

LG Optimus Me mit Root

Antworten
San Blarnoi
  • Forum-Beiträge: 2.545

09.12.2013, 22:34:17 via Website

Was meinst du denn mit Typen ändern? In der xml? Das kann ich nicht glauben...oO

Übersetzbar wird es dann schon sein, nur gespeichert wird das falsche, das hat der TE vermutlich nicht verifiziert :-P

Antworten
Tim B.
  • Forum-Beiträge: 101

10.12.2013, 15:45:02 via Website

LG Optimus Me mit Root

Antworten
impjor
  • Forum-Beiträge: 1.793

10.12.2013, 15:53:35 via App

Sorry, aber der Code ist wirklich murks!
1.: Warum sind all deine Felder public? Mach sie private!
2.: Wofür benutzt du SharedPreferences app_prefs = usw. wenn du sowieso immer nur neu getPreferences() benutzt?
3.: Du speicherst immer den leeren String username/passwort: Der ist nicht von alleine mit deinen EditText-Feldern verknüpft.
==> Lösche username/passwort und mache stattdessen etusername.getText().toString() wie schon vorgeschlagen.

LG

Liebe Grüße impjor.

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

Antworten
Tim B.
  • Forum-Beiträge: 101

10.12.2013, 15:55:20 via App

Danke, bin noch Anfänger. Ich werde das so machen

LG Optimus Me mit Root

Antworten
Michele
  • Forum-Beiträge: 1.525

10.12.2013, 15:57:17 via Website

Deswegen ging es bei Ihm auch.
Hat nun einen leeren String genommen anstatt EditText.
Im String steht ja nichts drin.
Du musst ja das was vom EditText eingegeben wird, wenigstens in dem String rein tun.
Und dann kommt das gleiche Problem wie es bei dir schon mal war.

Also wandel es in einem String um durch etusername.getText().toString();

Bevor du nächstes mal behauptest es geht, solltest du erstmal drüber nachdenken :D

Wir helfen dir ja nicht umsonst.

Und als Tipp:

Speichern:
1getSharedPreferences("EditText", MODE_PRIVATE).edit().putString("password", etusername.getText().toString()).apply();
Laden:
1String password = getSharedPreferences("EditText", MODE_PRIVATE).getString("password", "0");


LG

— geändert am 10.12.2013, 16:06:03

Antworten
Tim B.
  • Forum-Beiträge: 101

10.12.2013, 20:13:17 via Website

Michele
Deswegen ging es bei Ihm auch.
Hat nun einen leeren String genommen anstatt EditText.
Im String steht ja nichts drin.
Du musst ja das was vom EditText eingegeben wird, wenigstens in dem String rein tun.
Und dann kommt das gleiche Problem wie es bei dir schon mal war.

Also wandel es in einem String um durch etusername.getText().toString();

Bevor du nächstes mal behauptest es geht, solltest du erstmal drüber nachdenken :D

Wir helfen dir ja nicht umsonst.

Und als Tipp:

Speichern:
1getSharedPreferences("EditText", MODE_PRIVATE).edit().putString("password", etusername.getText().toString()).apply();
Laden:
1String password = getSharedPreferences("EditText", MODE_PRIVATE).getString("password", "0");


LG
Danke ;)


Nächstes Problem :( :

Wenn der Button geklickt wird, soll der Text aus meinen beiden EditText Boxen in Strings gespeichert werden. Danach auch in den SharedPreferences.



Nun zeigt mir eclipse wieder einen Fehler an:

The method getDefaultSharedPreferences(Context) in the type PreferenceManager is not applicable for the arguments (new View.OnClickListener(){})

— geändert am 10.12.2013, 20:15:10

LG Optimus Me mit Root

Antworten
Ludy
  • Admin
  • Forum-Beiträge: 7.957

10.12.2013, 20:20:44 via App

statt this -> getApplicationContext benutzen wenn ich mich nicht irre.

und eine editText feder wissen nich wer sie sind.

EditText etusername = (EditText) findViewById (R.id.deinedittextfeld);

— geändert am 10.12.2013, 20:24:26

Gruß Ludy (App Entwickler)

Mein Beitrag hat dir geholfen? Lass doch ein "Danke" da.☺

☕ Buy Me A Coffee ☕

Lebensmittelwarnung-App

✨Meine Wunschliste✨

📲Telegram NextPit News📲

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

10.12.2013, 20:21:38 via App

Mach mal in die Klammern this.getApplicationContext();

sonst übergibst du eine Activity und kein Context.

Ausserdem würde ich die preferences über dem onClick listener definieren.

Edit: @ludy da hast du recht und ich war zu spät :)

— geändert am 10.12.2013, 20:22:43

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

Antworten
impjor
  • Forum-Beiträge: 1.793

10.12.2013, 20:21:44 via App

Am besten lernst du, die Fehlermeldungen zu verstehen:
Tim B.
The method getDefaultSharedPreferences(Context) in the type PreferenceManager is not applicable for the arguments (new View.OnClickListener(){})
Die Methode getDefault....(Context) von der Klasse PreferenceManager ist nicht verfügbar für (View.OnClickListener())
Meint also, die Methode erwartet ein Objekt vom Typ Context, du übergibst eins vom Typ OnClickListener.
Wie kommt das?
Du scheinst diese Methode in einem new View.OnClickListener() {
public void onClick(View v) ....
}
auszuführen. Mit this beziehst du dich auf die aktuelle Klasse, hier also OnClickListener.

Warum funktioniert das bisher?
Bisher hast du diese Methode direkt aus einer Methode aus einer Activity ausgeführt, also das aktuelle Activity-Objekt übergeben. Da Activity von Context erbt, war das in Ordnung.

Lösung
Gibt einfach das aktuelle Activity-Objekt der Methode wie bisher. Nur darfst du nicht this benutzen (weil das der OnClickListener ist) sondern musst NameDeinerActivity.this benutzen.

LG

— geändert am 10.12.2013, 20:23:56

Liebe Grüße impjor.

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

Antworten
impjor
  • Forum-Beiträge: 1.793

10.12.2013, 20:23:19 via App

Pascal P.
sonst übergibst du eine Activity und kein Context
falsch.
Du kannst zudem ohne Bedenken eine Activity statt einem Context übergeben, da Activity von Context erbt.

LG

— geändert am 10.12.2013, 20:29:01

Liebe Grüße impjor.

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

Antworten
Tim B.
  • Forum-Beiträge: 101

10.12.2013, 20:24:20 via Website

Ludy
statt this -> getApplicationContext benutzen wenn ich mich nicht irre.
Vielen Dank, das hat geklappt!

LG Optimus Me mit Root

Antworten
Tim B.
  • Forum-Beiträge: 101

10.12.2013, 20:33:08 via Website

Leider beendet sich die App jetzt direkt beim Start (Galaxy S3, CM11 Nightly ; min. req. SDK: 9 ; target SDK: 19)

LG Optimus Me mit Root

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

10.12.2013, 20:39:42 via App

Ok ich hatte vergessen dass man sich mit this auf die Aktuelle Klasse bezieht.

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

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

10.12.2013, 20:41:15 via App

Tim B.
Leider beendet sich die App jetzt direkt beim Start (Galaxy S3, CM11 Nightly ; min. req. SDK: 9 ; target SDK: 19)


Irgend eine Fehlermeldung?
Was sagt LocCat?
Bitte beutze den debugger und logcat.

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

Antworten
Tim B.
  • Forum-Beiträge: 101

10.12.2013, 20:45:35 via Website

12-10 20:26:05.175: D/AndroidRuntime(10758): Shutting down VM
12-10 20:26:05.175: W/dalvikvm(10758): threadid=1: thread exiting with uncaught exception (group=0x41b9dc68)
12-10 20:26:05.175: E/AndroidRuntime(10758): FATAL EXCEPTION: main
12-10 20:26:05.175: E/AndroidRuntime(10758): Process: com.timbremer.ggnauenvertretungsplan, PID: 10758
12-10 20:26:05.175: E/AndroidRuntime(10758): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.timbremer.ggnauenvertretungsplan/com.timbremer.ggnauenvertretungsplan.MainActivity}: java.lang.NullPointerException
12-10 20:26:05.175: E/AndroidRuntime(10758): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2215)
12-10 20:26:05.175: E/AndroidRuntime(10758): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2265)
12-10 20:26:05.175: E/AndroidRuntime(10758): at android.app.ActivityThread.access$800(ActivityThread.java:145)
12-10 20:26:05.175: E/AndroidRuntime(10758): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1206)
12-10 20:26:05.175: E/AndroidRuntime(10758): at android.os.Handler.dispatchMessage(Handler.java:102)
12-10 20:26:05.175: E/AndroidRuntime(10758): at android.os.Looper.loop(Looper.java:136)
12-10 20:26:05.175: E/AndroidRuntime(10758): at android.app.ActivityThread.main(ActivityThread.java:5081)
12-10 20:26:05.175: E/AndroidRuntime(10758): at java.lang.reflect.Method.invokeNative(Native Method)
12-10 20:26:05.175: E/AndroidRuntime(10758): at java.lang.reflect.Method.invoke(Method.java:515)
12-10 20:26:05.175: E/AndroidRuntime(10758): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:781)
12-10 20:26:05.175: E/AndroidRuntime(10758): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
12-10 20:26:05.175: E/AndroidRuntime(10758): at dalvik.system.NativeStart.main(Native Method)
12-10 20:26:05.175: E/AndroidRuntime(10758): Caused by: java.lang.NullPointerException
12-10 20:26:05.175: E/AndroidRuntime(10758): at com.timbremer.ggnauenvertretungsplan.MainActivity.onCreate(MainActivity.java:27)
12-10 20:26:05.175: E/AndroidRuntime(10758): at android.app.Activity.performCreate(Activity.java:5231)
12-10 20:26:05.175: E/AndroidRuntime(10758): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
12-10 20:26:05.175: E/AndroidRuntime(10758): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2169)
12-10 20:26:05.175: E/AndroidRuntime(10758): ... 11 more
12-10 20:26:07.150: I/Process(10758): Sending signal. PID: 10758 SIG: 9
12-10 20:30:58.700: D/AndroidRuntime(11736): Shutting down VM
12-10 20:30:58.700: W/dalvikvm(11736): threadid=1: thread exiting with uncaught exception (group=0x41b9dc68)
12-10 20:30:58.700: E/AndroidRuntime(11736): FATAL EXCEPTION: main
12-10 20:30:58.700: E/AndroidRuntime(11736): Process: com.timbremer.ggnauenvertretungsplan, PID: 11736
12-10 20:30:58.700: E/AndroidRuntime(11736): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.timbremer.ggnauenvertretungsplan/com.timbremer.ggnauenvertretungsplan.MainActivity}: java.lang.NullPointerException
12-10 20:30:58.700: E/AndroidRuntime(11736): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2215)
12-10 20:30:58.700: E/AndroidRuntime(11736): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2265)
12-10 20:30:58.700: E/AndroidRuntime(11736): at android.app.ActivityThread.access$800(ActivityThread.java:145)
12-10 20:30:58.700: E/AndroidRuntime(11736): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1206)
12-10 20:30:58.700: E/AndroidRuntime(11736): at android.os.Handler.dispatchMessage(Handler.java:102)
12-10 20:30:58.700: E/AndroidRuntime(11736): at android.os.Looper.loop(Looper.java:136)
12-10 20:30:58.700: E/AndroidRuntime(11736): at android.app.ActivityThread.main(ActivityThread.java:5081)
12-10 20:30:58.700: E/AndroidRuntime(11736): at java.lang.reflect.Method.invokeNative(Native Method)
12-10 20:30:58.700: E/AndroidRuntime(11736): at java.lang.reflect.Method.invoke(Method.java:515)
12-10 20:30:58.700: E/AndroidRuntime(11736): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:781)
12-10 20:30:58.700: E/AndroidRuntime(11736): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
12-10 20:30:58.700: E/AndroidRuntime(11736): at dalvik.system.NativeStart.main(Native Method)
12-10 20:30:58.700: E/AndroidRuntime(11736): Caused by: java.lang.NullPointerException
12-10 20:30:58.700: E/AndroidRuntime(11736): at com.timbremer.ggnauenvertretungsplan.MainActivity.onCreate(MainActivity.java:27)
12-10 20:30:58.700: E/AndroidRuntime(11736): at android.app.Activity.performCreate(Activity.java:5231)
12-10 20:30:58.700: E/AndroidRuntime(11736): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
12-10 20:30:58.700: E/AndroidRuntime(11736): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2169)
12-10 20:30:58.700: E/AndroidRuntime(11736): ... 11 more
12-10 20:38:03.880: D/AndroidRuntime(12321): Shutting down VM
12-10 20:38:03.880: W/dalvikvm(12321): threadid=1: thread exiting with uncaught exception (group=0x41b9dc68)
12-10 20:38:03.885: E/AndroidRuntime(12321): FATAL EXCEPTION: main
12-10 20:38:03.885: E/AndroidRuntime(12321): Process: com.timbremer.ggnauenvertretungsplan, PID: 12321
12-10 20:38:03.885: E/AndroidRuntime(12321): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.timbremer.ggnauenvertretungsplan/com.timbremer.ggnauenvertretungsplan.MainActivity}: java.lang.NullPointerException
12-10 20:38:03.885: E/AndroidRuntime(12321): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2215)
12-10 20:38:03.885: E/AndroidRuntime(12321): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2265)
12-10 20:38:03.885: E/AndroidRuntime(12321): at android.app.ActivityThread.access$800(ActivityThread.java:145)
12-10 20:38:03.885: E/AndroidRuntime(12321): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1206)
12-10 20:38:03.885: E/AndroidRuntime(12321): at android.os.Handler.dispatchMessage(Handler.java:102)
12-10 20:38:03.885: E/AndroidRuntime(12321): at android.os.Looper.loop(Looper.java:136)
12-10 20:38:03.885: E/AndroidRuntime(12321): at android.app.ActivityThread.main(ActivityThread.java:5081)
12-10 20:38:03.885: E/AndroidRuntime(12321): at java.lang.reflect.Method.invokeNative(Native Method)
12-10 20:38:03.885: E/AndroidRuntime(12321): at java.lang.reflect.Method.invoke(Method.java:515)
12-10 20:38:03.885: E/AndroidRuntime(12321): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:781)
12-10 20:38:03.885: E/AndroidRuntime(12321): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
12-10 20:38:03.885: E/AndroidRuntime(12321): at dalvik.system.NativeStart.main(Native Method)
12-10 20:38:03.885: E/AndroidRuntime(12321): Caused by: java.lang.NullPointerException
12-10 20:38:03.885: E/AndroidRuntime(12321): at com.timbremer.ggnauenvertretungsplan.MainActivity.onCreate(MainActivity.java:27)
12-10 20:38:03.885: E/AndroidRuntime(12321): at android.app.Activity.performCreate(Activity.java:5231)
12-10 20:38:03.885: E/AndroidRuntime(12321): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
12-10 20:38:03.885: E/AndroidRuntime(12321): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2169)
12-10 20:38:03.885: E/AndroidRuntime(12321): ... 11 more

— geändert am 10.12.2013, 20:46:55

LG Optimus Me mit Root

Antworten
impjor
  • Forum-Beiträge: 1.793

10.12.2013, 20:45:39 via App

Am besten liest du dir das LogCat **selber** durch, bis du auf die erste Zeile stößt, die am Ende mit (EineDateiVonDir:Zahl) aufhört.
Dann siehst du dir in dieser Datei die Zeile "Zahl" an.

LG


***Edit****
Das war gemeint: NullPointerException bei e(MainActivity.java:27)

LG

— geändert am 10.12.2013, 20:46:48

Liebe Grüße impjor.

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

Antworten
Tim B.
  • Forum-Beiträge: 101

10.12.2013, 20:47:32 via Website

impjor
Am besten liest du dir das LogCat **selber** durch, bis du auf die erste Zeile stößt, die am Ende mit (EineDateiVonDir:Zahl) aufhört.
Dann siehst du dir in dieser Datei die Zeile "Zahl" an.

LG


***Edit****
Das war gemeint: NullPointerException bei e(MainActivity.java:27)

LG
Dachte ich mir, was bedeutet das? ;)

LG Optimus Me mit Root

Antworten
impjor
  • Forum-Beiträge: 1.793

10.12.2013, 20:49:54 via App

Das du eine Methode auf ein Objekt aufrufst, welches null ist.
Beispiel

Button b;
b.setOnClickListener(...);
Führt zu einer NullPointerException(NPE), da b nicht gesetzt wurde (=null ist).
Button b = new Button();
oder
Button b = findViewById(...);
oder
Button b = eineMethodeDieEinenButtonZurückGibt();

wäre richtig.

LG

Liebe Grüße impjor.

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

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

10.12.2013, 20:51:03 via App

Das irgend eine Variable in zeile 27 null ist , die nicht null sein darf..

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

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

10.12.2013, 20:53:28 via App

Laut anfangscode müsste das diesser sein
1SharedPreferences app_preferences =  PreferenceManager.getDefaultSharedPreferences(getApplicationContext());

Ps hab ihn so geändert dass wie du es haben müsstest.

— geändert am 10.12.2013, 20:54:02

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

Antworten
Tim B.
  • Forum-Beiträge: 101

10.12.2013, 21:00:33 via Website

Pascal P.
Laut anfangscode müsste das diesser sein
1SharedPreferences app_preferences =  PreferenceManager.getDefaultSharedPreferences(getApplicationContext());

Ps hab ihn so geändert dass wie du es haben müsstest.
hab das so kopiert, selber Fehler
Zeile 27 wäre das hier: setContentView(R.layout.activity_main);
Das habe ich aber nicht geschrieben, das wird doch beim Start generiert?

— geändert am 10.12.2013, 21:04:13

LG Optimus Me mit Root

Antworten
impjor
  • Forum-Beiträge: 1.793

10.12.2013, 21:27:00 via App

Das setContentView wird schon richtig sein. Poste mal deine Zeile 27! Vorher nochmal ausführen um zu schauen, ob die Zeile sich geändert hat.

LG

Liebe Grüße impjor.

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

Antworten
Tim B.
  • Forum-Beiträge: 101

10.12.2013, 21:35:10 via App

impjor
Das setContentView wird schon richtig sein. Poste mal deine Zeile 27! Vorher nochmal ausführen um zu schauen, ob die Zeile sich geändert hat.

LG
Zeile 27 hab ich doch gepostet

LG Optimus Me mit Root

Antworten
impjor
  • Forum-Beiträge: 1.793

10.12.2013, 21:40:08 via App

Ja, aber vielleicht hast du ausversehen eine Leerzeile o.ä. getippt, sodass alles "verrutscht" ist.
Richtige Klasse (MainActivity)?
LG

Liebe Grüße impjor.

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

Antworten
Michele
  • Forum-Beiträge: 1.525

11.12.2013, 00:05:59 via Website

Hallo.

1. Dir wurde glaube schonmal gesagt das du
1SharedPreferences app_preferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
nicht brauchst.

Es reicht alleine wie ich es dir gezeigt hatte.

2. Bitte zeige uns deinen GANZEN Aktuellen Code.


LG

— geändert am 11.12.2013, 00:07:59

Antworten
Tim B.
  • Forum-Beiträge: 101

11.12.2013, 18:50:04 via Website

Michele
Hallo.

1. Dir wurde glaube schonmal gesagt das du
1SharedPreferences app_preferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
nicht brauchst.

Es reicht alleine wie ich es dir gezeigt hatte.

2. Bitte zeige uns deinen GANZEN Aktuellen Code.


LG
Hier ist nun der gesamte code der MainActivity.java. Allerdings muss ich euch vorwarnen: Alles ist total chaotisch und vieles wird falsch sein. Das Ende habe ich noch nicht geordnet und alles erstmal aufgeschrieben. Also seid nicht zu böse mit mir. Das Projekt ist auf Eis gelegt, bis ich das Buch habe. Übrigens geht es um eine Vertretungsplan App für meine Schule. Das System ist Passwortgeschützt, deshalb habe ich in der App ein login form. Leider ist das System ziemlich kompliziert, die id in der URL des Vplanes erhöht sich jeden Tag um zwei Stellen. Noch weiß ich nicht, wie ich das in die App implementieren kann. Hat da jemand vielleicht eine Idee?
Danke
tbremer19

1package com.timbremer.ggnauenvertretungsplan;
2
3import org.apache.http.util.EncodingUtils;
4
5import android.os.Bundle;
6import android.view.View;
7import android.webkit.WebView;
8import android.widget.Button;
9import android.widget.EditText;
10import android.app.Activity;
11
12public class MainActivity extends Activity {
13
14 private EditText etusername;
15 private EditText etpassword;
16 private Button btlogin;
17 private String password;
18 private String username;
19
20
21
22 @Override
23 public void onCreate(Bundle savedInstanceState) {
24 super.onCreate(savedInstanceState);
25 setContentView(R.layout.activity_main);
26
27 //button
28
29 btlogin.setOnClickListener(new View.OnClickListener() {
30
31 @Override
32 public void onClick(View v) {
33 username = etusername.getText().toString();
34 password = etpassword.getText().toString();
35
36
37 //SharedPreferences speichern
38 getPreferences(MODE_PRIVATE).edit().putString("username",username).apply();
39
40 getPreferences(MODE_PRIVATE).edit().putString("password",password).apply();
41
42
43 //SharedPrefs auslesen
44
45 String password = getSharedPreferences("EditText", MODE_PRIVATE).getString("password", "0");
46 String username = getSharedPreferences("EditText", MODE_PRIVATE).getString("username", "0");
47
48 //WebView starten
49
50 WebView wv = new WebView(null);
51 setContentView(wv);
52
53 String url = "http://ggnauen.de/index.php";
54 String data = "username" + username + "&password" + password;
55
56 wv.postUrl(url, EncodingUtils.getBytes(data, "base64"));
57
58
59
60 }
61
62
63 });
64
65
66
67 }
68
69
70
71
72}

— geändert am 11.12.2013, 18:57:14

LG Optimus Me mit Root

Antworten
impjor
  • Forum-Beiträge: 1.793

11.12.2013, 20:52:16 via App

Edit: Sorry, habe mich gerade etwas verguckt.
Du hast aber einen Fehler: WebView benötigt beim erstellen (new WebView) einen Context. Du darfst nicht einfach null übergeben. Deine Activity kannst du nutzen als Context, also NameDerActivity.this


Zu dem ist es etwas sinnlos, die Daten in SharedPreferences zu speichern, um sie dann wieder aus zu lesen!

Sollte es zum Absturz kommen, bitte erneut das LogCat ansehen.


Ach ja, nochwas bzgl der id. Einfach hardcoded Datum und (damalige) id speichern, dann aktuelles Datum - (damaliges Datum) * 2 + damalige_id = id

Pseudocode
Date d = new Date(festesDatum)
int damaligeId = 6
int tage = Datum.Heute - d
int id = tage * 2 + damaligeId

LG

— geändert am 11.12.2013, 21:16:57

Liebe Grüße impjor.

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

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

11.12.2013, 21:18:44 via App

Für die url:
Du brauchst einen Url generator oder so etwas.
Also du musst die Aktuelle Url nehmen und dann immer die Stellen ändern.
Wenn du dann die neue Url generiert hast, kannst du überprüfen,ob sie existiert.
Wenn nicht machst du den vorgang solange,
bis sie existiert, angenommes es ändern sich immer nur 2 stellen und auch immer gleich also zb. um 2.
Das mit dem mehrmaligen wiederholen des Generiervorgangs dient dazu, auch die url zu wissen auch wenn die App einige Tage nicht lief.
Aber eigentlich gibt müsste es doch einen Link von der Schulhomepage auf den vplan geben.
Diesen könntest du auslesen und so auf das Generiern der Url verzichten.
Um das Loginverfahren zu vereinfachen könntest du auch die Daten schon per http post schicken und somit die Eingabe von Benutzerdaten sparen.

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

Antworten
impjor
  • Forum-Beiträge: 1.793

11.12.2013, 21:37:57 via App

@Pascal P: Stell dir mal vor, sie ändern die id seit einem Jahr... Da darfst du aber viele Urls prüfen bei jedem mal!


Berechne lieber die id anhand des aktuellen Datums.

LG

Liebe Grüße impjor.

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

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

11.12.2013, 22:02:20 via App

Da haste recht ist mir dach dem Lesen deines Posts auch eingefallen.

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

Antworten
Ludy
  • Admin
  • Forum-Beiträge: 7.957

11.12.2013, 22:53:05 via App

Tim B.

1package com.timbremer.ggnauenvertretungsplan;
2
3import org.apache.http.util.EncodingUtils;
4
5import android.os.Bundle;
6import android.view.View;
7import android.webkit.WebView;
8import android.widget.Button;
9import android.widget.EditText;
10import android.app.Activity;
11
12public class MainActivity extends Activity {
13
14 private EditText etusername;
15 private EditText etpassword;
16 private Button btlogin;
17 private String password;
18 private String username;
19
20
21
22 @Override
23 public void onCreate(Bundle savedInstanceState) {
24 super.onCreate(savedInstanceState);
25 setContentView(R.layout.activity_main);
26
27 //button
28
29 btlogin.setOnClickListener(new View.OnClickListener() {
30
31 @Override
32 public void onClick(View v) {
33 username = etusername.getText().toString();
34 password = etpassword.getText().toString();
35
36
37 //SharedPreferences speichern
38 getPreferences(MODE_PRIVATE).edit().putString("username",username).apply();
39
40 getPreferences(MODE_PRIVATE).edit().putString("password",password).apply();
41
42
43 //SharedPrefs auslesen
44
45 String password = getSharedPreferences("EditText", MODE_PRIVATE).getString("password", "0");
46 String username = getSharedPreferences("EditText", MODE_PRIVATE).getString("username", "0");
47
48 //WebView starten
49
50 WebView wv = new WebView(null);
51 setContentView(wv);
52
53 String url = "http://ggnauen.de/index.php";
54 String data = "username" + username + "&password" + password;
55
56 wv.postUrl(url, EncodingUtils.getBytes(data, "base64"));
57
58
59
60 }
61
62
63 });
64
65
66
67 }
68
69
70
71
72}

Der code hat so nie eine Chance zu über leben.
Hast du eine Layout Datei die activity_main heißt?
Gibts dort 2 EditText felder und ein Button? haben die eine ID?

Gruß Ludy

Gruß Ludy (App Entwickler)

Mein Beitrag hat dir geholfen? Lass doch ein "Danke" da.☺

☕ Buy Me A Coffee ☕

Lebensmittelwarnung-App

✨Meine Wunschliste✨

📲Telegram NextPit News📲

Antworten
San Blarnoi
  • Forum-Beiträge: 2.545

11.12.2013, 23:11:33 via Website


25 setContentView(R.layout.activity_main);
26
27 //button
28
29 btlogin.setOnClickListener(new View.OnClickListener() {

Ist nicht völlig offensichtlich, wo hier wohl die Nullpointer-Exception sein könnte?

Antworten
San Blarnoi
  • Forum-Beiträge: 2.545

12.12.2013, 00:42:40 via Website

Wäre jetzt vermutlich lehrreicher gewesen, wenn du das den Tim hättest herausfinden lassen ;-)

Antworten
Tim B.
  • Forum-Beiträge: 101

12.12.2013, 22:58:26 via App

Danke für eure Hilfe und die vielen Antworten! Ja es gibt natürlich zwei Edittexts und einen button. Sooo blöd bin ich nun auch nicht ;)

LG Optimus Me mit Root

Antworten
Ludy
  • Admin
  • Forum-Beiträge: 7.957

12.12.2013, 23:03:55 via App

Sorry aber manchmal sind die einfachsten Dinge die schwersten.

Trotzdem fehlen entscheidene Dinge in deinem Code die wir dir schon gesagt/geschrieben haben wenn du das erst mal umsetzt wärst du schon weiter.

Gruß Ludy

Gruß Ludy (App Entwickler)

Mein Beitrag hat dir geholfen? Lass doch ein "Danke" da.☺

☕ Buy Me A Coffee ☕

Lebensmittelwarnung-App

✨Meine Wunschliste✨

📲Telegram NextPit News📲

Antworten
Tim B.
  • Forum-Beiträge: 101

12.12.2013, 23:08:32 via App

Wie gesagt, ich bin noch nicht weit in Sachen Programmierung. Ich meinte ja, im Code wird viel fehlen und am Ende ist die Reihenfolge falsch, ich habe nur alles aufgeschrieben. So ist mir klar, dass die App nicht funktionieren kann.

LG Optimus Me mit Root

Antworten
Ludy
  • Admin
  • Forum-Beiträge: 7.957

12.12.2013, 23:15:37 via App

okay wenn du Hilfe brauchst sag Bescheid, kann zwar nicht alles weil hab mir das programmieren selber beigebracht aber vieles kenn ich oder weiß wo ich es finden kann.

Gruß Ludy

Gruß Ludy (App Entwickler)

Mein Beitrag hat dir geholfen? Lass doch ein "Danke" da.☺

☕ Buy Me A Coffee ☕

Lebensmittelwarnung-App

✨Meine Wunschliste✨

📲Telegram NextPit News📲

Antworten
Tim B.
  • Forum-Beiträge: 101

13.12.2013, 16:34:10 via Website

Bitte entschuldigt, hier aber noch eine letzte blöde Frage (das Buch ist noch nicht da aber ich kann nicht warten):
Wie weise ich den Button zu?
EDIT: Hat sich erledigt, habs selbst hinbekommen ;)
Gruß
tbremer19

— geändert am 13.12.2013, 16:35:28

LG Optimus Me mit Root

Antworten