So halte ich die gleichen Fehler, egal wie oft ich versuche, meinen Code hier und da zu zwicken. Ich werde jedes bisschen Code veröffentlichen, der mit dem Fehler zu tun hat.Fehler, Null-Zeiger-Ausnahme für SharedPreferences
Ich werde keinen unnötigen Code hinzufügen. Wenn mein Code also nicht vollständig aussieht, dann weil ich ihn abgeschnitten habe, damit die Leute das Problem leichter diagnostizieren können!
First Class
schrieb ich !!! Error !!! nach dem Code, der laut meinem Protokoll die Ursache des Fehlers war.
SharedPreferences sf;
SharedPreferences.Editor editor;
@Override
protected void onCreate(Bundle savedInstanceState) {
sf = getSharedPreferences("MyData", MODE_PRIVATE);
checkCookie();
}
//function for making sure there's data
public void checkCookie() {
editor = sf.edit();
if (sf.getInt("cookies", -1) == -1) {
editor.putInt("cookies", 0);
}
}
//function for retrieving amount of cookies
public int getCookies()
{
editor = sf.edit(); !!! Error here !!!
int x = sf.getInt("cookies", 0);
return x;
}
//function for changing amount of cookies
public void changeCookies(int x)
{
editor = sf.edit();
editor.putInt("cookies", x);
}
zweite Klasse
Ich habe !!! Error !!! bei dem zweiten Fehler gegeben, der im Grunde ist, was die Funktion mit dem Fehler darin aufruft.
//MyActivity is the first class
MyActivity mCookie = new MyActivity();
//function for adding cookies
public void cookieCalc(){
if (Math.abs((5-(millis/1000))) <= 0.005)
mCookie.changeCookies(100 * CB); ... much more similar code
//an if statement within a function which just calls the function getcookies and cookiecalc
if (loop == 2){
cookieCalc();
myText.setText("= " + mCookie.getCookies()); !!! this calls the function which gives error !!!
}
Der Fehler ist zu 100% wegen SharedPreferences wie es bei normalen Variablen gearbeitet, aber ich brauchte die Variablen zu speichern und mir wurde gesagt, dies eine sehr einfache Methode, dies zu tun. Wenn das alles immer noch nicht genug ist und ich es Ihnen nicht erklären kann, dann werde ich meinen gesamten Code auf gitHub oder einer anderen Anzeigeplattform einfügen.
Fehlerprotokolle
04-27 21:11:46.258 26975-26975/app.z0nen.menu E/AndroidRuntime: java.lang.NullPointerException: Attempt to invoke interface method 'android.content.SharedPreferences$Editor android.content.SharedPreferences.edit()' on a null object reference
04-27 21:11:46.258 26975-26975/app.z0nen.menu E/AndroidRuntime: at app.z0nen.slidemenu.MyActivity.changeCookies(MyActivity.java:74)
04-27 21:11:46.258 26975-26975/app.z0nen.menu E/AndroidRuntime: at app.z0nen.slidemenu.menu1_Fragment.cookieCalc(menu1_Fragment.java:75)
04-27 21:11:46.258 26975-26975/app.z0nen.menu E/AndroidRuntime: at app.z0nen.slidemenu.menu1_Fragment$1.onClick(menu1_Fragment.java:148)
04-27 21:11:46.258 26975-26975/app.z0nen.menu E/AndroidRuntime: at android.view.View.performClick(View.java:5242)
04-27 21:11:46.258 26975-26975/app.z0nen.menu E/AndroidRuntime: at android.widget.TextView.performClick(TextView.java:10571)
04-27 21:11:46.258 26975-26975/app.z0nen.menu E/AndroidRuntime: at android.view.View$PerformClick.run(View.java:21196)
04-27 21:11:46.258 26975-26975/app.z0nen.menu E/AndroidRuntime: at android.os.Handler.handleCallback(Handler.java:739)
04-27 21:11:46.258 26975-26975/app.z0nen.menu E/AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:95)
04-27 21:11:46.258 26975-26975/app.z0nen.menu E/AndroidRuntime: at android.os.Looper.loop(Looper.java:145)
04-27 21:11:46.258 26975-26975/app.z0nen.menu E/AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java:6938)
04-27 21:11:46.258 26975-26975/app.z0nen.menu E/AndroidRuntime: at java.lang.reflect.Method.invoke(Native Method)
04-27 21:11:46.258 26975-26975/app.z0nen.menu E/AndroidRuntime: at java.lang.reflect.Method.invoke(Method.java:372)
04-27 21:11:46.258 26975-26975/app.z0nen.menu E/AndroidRuntime: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1404)
04-27 21:11:46.258 26975-26975/app.z0nen.menu E/AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199)
Die 'Activity' Klasse ist nicht dazu gedacht, die Basisklasse für alles zu sein, und Sie können eine' Activity' Unterklasse mit 'new' nicht instanziiert und es korrekt funktionieren. Zum einen wird 'onCreate()' nicht aufgerufen, was die Ursache für Ihre aktuelle NPE zu sein scheint. –
onCreate ist auf der Hauptfunktion es, was meine App erstellt. Ich habe versucht, system.out.println zu machen, aber ich konnte es nirgends in meinem Code finden. Ich habe keine Aktivitätsunterklasse Ich habe gerade einen leeren Konstruktor erstellt und hatte ihn so, dass er nur Informationen von ihm erhalten kann. – TeenCoder
Sie sollten einen Kontext zu Ihrem zweiten Klasse übergeben, keine nicht-verwalteten Aktivität erstellen –