shared Preferences

  • Antworten:12
  • Bentwortet
Gelöschter Account
  • Forum-Beiträge: 44

07.10.2014, 09:38:53 via Website

Habe Probleme mit sharedPreference. Die App hängt sich auf bei:

SharedPreferences pref = getApplicationContext().getSharedPreferences("MyPref", 0);

meine LogCat:

at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2016)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2117)
        at android.app.ActivityThread.access$700(ActivityThread.java:134)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1218)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:137)
        at android.app.ActivityThread.main(ActivityThread.java:4867)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:511)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1007)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:774)
        at dalvik.system.NativeStart.main(Native Method)
 Caused by: java.lang.NullPointerException
        at android.content.ContextWrapper.getApplicationContext(ContextWrapper.java:101)
        at com.example.homerdjsimpson.shared.shared.<init>(shared.java:9)
        at java.lang.Class.newInstanceImpl(Native Method)
        at java.lang.Class.newInstance(Class.java:1319)
        at android.app.Instrumentation.newActivity(Instrumentation.java:1068)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2007)

            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2117)
            at android.app.ActivityThread.access$700(ActivityThread.java:134)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1218)
            at android.os.Handler.dispatchMessage(Handler.java:99)
            at android.os.Looper.loop(Looper.java:137)
            at android.app.ActivityThread.main(ActivityThread.java:4867)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:511)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1007)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:774)
            at dalvik.system.NativeStart.main(Native Method)

Antworten
Sven R.
  • Forum-Beiträge: 1.904

07.10.2014, 09:51:37 via App

Ohne nachzudenken sagen ich mal, dass das getAplicationContext() das Problem ist. Ich habe mit dem Kontext immer schlechter Erfahrungen gemacht. Stattdessen habe ich die Activity selber als Kontext genommen.
Zb.
this.getSharedPreferences()
Oder
MainActivity.this. getSharedPreferences()

Edit: Wenn du nur eine SharedPreferences benutzt, würde ich stattdessen PreferencesManager.getDefaultSharedPreferences() nehmen.

— geändert am 07.10.2014, 09:54:16

Wenn dir mein Beitrag gefällt, kannst dich einfach mit dem 👍 "Danke"-Button auf der Website dieses Forums bedanken. 😀

Why Java? - Because I can't C#

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

07.10.2014, 10:00:08 via Website

muss

SharedPreferences pref = this.getApplicationContext().getSharedPreferences("MyPref", 0);
    SharedPreferences.Editor editor = pref.edit();

vor oder nach

 @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_shared);

eingefügt werden?

Antworten
Sven R.
  • Forum-Beiträge: 1.904

07.10.2014, 12:34:51 via App

Danach. Also in der onCreate

Wenn dir mein Beitrag gefällt, kannst dich einfach mit dem 👍 "Danke"-Button auf der Website dieses Forums bedanken. 😀

Why Java? - Because I can't C#

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

07.10.2014, 12:46:35 via Website

ok soweit super..

das problem ist jetzt: ich mach das mit:editor.putInt("zahl", zah) und pref.getInt("zahl",0)

ich mach also durch den putInt aus meinem integer einen String (oder?)

und wenn ich mit getInt abrufe, bekomme ich ein String. wie kann ich den wieder zu einem integer werden lassen?

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

07.10.2014, 12:53:48 via Website

bzw. wie kann ich "zahl" was er ausliest wieder meinem integer zah zuordnen

Antworten
Fabian Simon
  • Forum-Beiträge: 359

07.10.2014, 12:57:53 via Website

Das eben gesagte ergibt keinen Sinn.

Hinter der Put methode könnte bespielweise eine Hashmap sich befinden.
Das heißt imgrunde wird das ganze nach dem INI verfahren abspeichert (key,value).
Somit gehst du mit editor.putInt("key",value) hin un setzt den wert.
nach der übertragung holst du diesen mit getInt("key",0) wieder ab.
Der String ist sozusagen der variablename das beudeutet auch im Umkehrschluss: er muss eindeutig sein.
Ps.: Weiß nicht ob du es weißt die Zahl die du bei get noch angiebst, ist die Zahl die er zurückliefert wenn der Key nicht gefunden wurde.

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

07.10.2014, 13:09:35 via Website

ja das weiß ich.

mein Problem. ich zeige zufällige zahlen an. diese sollen gespeichert werden. jedesmal wenn die app gestartet wird soll geprüft werden ob was gespeichert ist. ansonsten soll 0 erscheinen. da habe ich eine if Anweisung. wenn ich die app starte und nix gespeichert ist und die zahl null ist soll er ehe zufällige zahlen generieren die gespeichert werden sollen. und das macht er nicht.

Antworten
Fabian Simon
  • Forum-Beiträge: 359

07.10.2014, 13:13:32 via Website

Poste doch mal deine Oncreate Methode dann kann man sich das ganze ja anschauen :)

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

07.10.2014, 13:23:25 via Website

public class Zahlen extends Activity implements  View.OnClickListener {


int zah;




@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.zahlen);
    SharedPreferences pref = getSharedPreferences("GAME", 0);
    pref.getInt("zahl", 0);

    final    TextView textZah = (TextView) findViewById(R.id.textZah);

if (zah == 0)
{
zah = (int) (50 * Math.random());

    if (zah ==0){
        zah = zah+1;
    }

SharedPreferences.Editor editor = pref.edit();
editor.putInt("zahl", zah);
editor.apply();
textZah.setText(String.valueOf(zah));

}
else
{

SharedPreferences.Editor editor = pref.edit();
editor.putInt("zahl", zah);
editor.apply();
    textZah.setText(String.valueOf(zah));
    textZah1.setText(String.valueOf(zah1));
    aus = zah + zah1;


}

}

Antworten
Fabian Simon
  • Forum-Beiträge: 359

07.10.2014, 13:30:43 via Website

homerdj

public class Zahlen extends Activity implements  View.OnClickListener {


int zah;




@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.zahlen);
    SharedPreferences pref = getSharedPreferences("GAME", 0);
    zah = pref.getInt("zahl", 0); //du solltest auch den wert den du bei get bekommst der Variable zuweisen

    final    TextView textZah = (TextView) findViewById(R.id.textZah);

if (zah == 0)
{
zah = (int) (50 * Math.random());

    if (zah ==0){
        zah = zah+1;
    }

SharedPreferences.Editor editor = pref.edit();
editor.putInt("zahl", zah);
editor.apply();
textZah.setText(String.valueOf(zah));

}
else
{

SharedPreferences.Editor editor = pref.edit();
editor.putInt("zahl", zah);
editor.apply();
    textZah.setText(String.valueOf(zah));
    textZah1.setText(String.valueOf(zah1));
    aus = zah + zah1;


}

}

Habe an den Zeilen die ich geändert habe kommentare gemacht

Und wo setzt du das: getSharedPreferences("GAME", 0); ???

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

07.10.2014, 13:34:50 via Website

ich probier es glei mal aus.

das sharedPreference hab ich aus dem tut

enter link description here

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

07.10.2014, 14:53:33 via Website

funzt.danke..kleiner Fehler große Wirkung

Antworten