Не удается получить значение из SharedPreferences

#java #android #sharedpreferences

#java #Android #sharedpreferences

Вопрос:

Эй, кто-нибудь может мне здесь помочь? Я хочу получить SharedPreferences из User.java но я всегда получаю следующую ошибку:

2020-12-29 16:42:11.424 22063-22063/com.example.bauwagenapp E/AndroidRuntime: ФАТАЛЬНОЕ ИСКЛЮЧЕНИЕ: основной процесс: com.example.bauwagenapp, PID: 22063 java.lang.RuntimeException: Не удается запустить activity ComponentInfo{com.example.bauwagenapp/com.example.bauwagenapp.ActivityUser}: java.lang.Исключение NullPointerException: попытка вызвать виртуальный метод ‘android.content.Контекст android.контент.Context.getApplicationContext()’ для нулевой ссылки на объект в android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3449) в android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3601) в android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85) в android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) в android.app.serverтранзакции.TransactionExecutor.execute(TransactionExecutor.java:95) в android.app.ActivityThread$H.handleMessage(ActivityThread.java:2066) в android.os.Handler.DispatchMessage(Handler.java: 106) в android.os.Looper.loop(Looper.java:223) в android.app.ActivityThread.main(ActivityThread.java:7656) в java.lang.reflect.Метод.invoke(собственный метод) в com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592) в com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)

Вызвано: java.lang.Исключение NullPointerException: попытка вызвать виртуальный метод ‘android.content.Контекст android.content.Context.getApplicationContext()’ для нулевой ссылки на объект в android.content.ContextWrapper.getApplicationContext(ContextWrapper.java:122) в com.example.bauwagenapp.User.getGuthabenFromPreference(User.java:44) в com.example.bauwagenapp.User.(User.java:39) в com.example.bauwagenapp.ActivityUser.onCreate(ActivityUser.java: 43) на android.app.Activity.performCreate(Activity.java: 8000) на android.app.Activity.performCreate(Activity.java:7984) на android.app.Instrumentation.callActivityOnCreate(Instrumentation.java: 1309) на android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3422) в android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3601) в android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85) в android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) в android.app.serverтранзакции.TransactionExecutor.execute(TransactionExecutor.java:95) в android.app.ActivityThread$H.handleMessage(ActivityThread.java:2066) в android.os.Handler.DispatchMessage(Handler.java: 106) в android.ос.Looper.loop(Looper.java: 223) в android.app.ActivityThread.main(ActivityThread.java:7656) в java.lang.reflect.Method.invoke(собственный метод) в com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592) в com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947) 2020-12-29 16:42:11.515 22063-22063/ com.пример.bauwagenappI / Process: отправка сигнала. PID: 22063 SIG: 9

Здесь мой User.java , где ошибка вызывает:

 package com.example.bauwagenapp;

import android.content.SharedPreferences;
import androidx.appcompat.app.AppCompatActivity;

public class User extends AppCompatActivity {

    private String name;
    private int guthaben;
    private int getrunken;

    public void setName(String name){
        this.name = name;
    }

    public String getName(){
        return name;
    }

    public void setGuthaben(int guthaben){
        this.guthaben = guthaben;
    }

    public int getGuthaben(){
        return guthaben;
    }

    public void setGetrunken(int getrunken){
        this.getrunken = getrunken;
    }

    public int getGetrunken(){
        return getrunken;
    }


    public User(String name){
        this.name = name;
        this.guthaben = getGuthabenFromPreference(this.name);
        this.getrunken = getGetrunkenFromPreference(this.name);
    }

    public int getGuthabenFromPreference(String name){
        SharedPreferences Guthaben_User = getApplicationContext().getSharedPreferences(name, 0);
        int Guthaben = Guthaben_User.getInt("Guthaben", 0);
        return Guthaben;
    }

    public int getGetrunkenFromPreference(String name){
        SharedPreferences Getrunken_User = getApplicationContext().getSharedPreferences(name, 0);
        int Getrunken = Getrunken_User.getInt("Getrunken", 0);
        return Getrunken;
    }
}
 

Комментарии:

1. NullPointerException

2. Вы расширяете активность для модели. Я нахожу это немного странным. Можете ли вы немного объяснить, что вы пытаетесь здесь сделать?

Ответ №1:

public int getGetrunkenFromPreference(имя строки)

Вы не можете вызывать общедоступные функции в классе, расширенном из activity, поскольку это activity не может быть создано с помощью new operator .

Ответ №2:

правильный способ сделать это:

  public class MyActivity extends AppCompatActivity {
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       User user = new User(getApplicationContext(),"NAME");
   }
}

public class User {

private String name;
private int guthaben;
private int getrunken;

public void setName(String name){
    this.name = name;
}

public String getName(){
    return name;
}

public void setGuthaben(int guthaben){
    this.guthaben = guthaben;
}

public int getGuthaben(){
    return guthaben;
}

public void setGetrunken(int getrunken){
    this.getrunken = getrunken;
}

public int getGetrunken(){
    return getrunken;
}


public User(Context context, String name){
    this.name = name;
    this.guthaben = getGuthabenFromPreference(context, this.name);
    this.getrunken = getGetrunkenFromPreference(context, this.name);
}

public int getGuthabenFromPreference(Context context, String name){
    SharedPreferences Guthaben_User = context.getSharedPreferences(name, 0);
    int Guthaben = Guthaben_User.getInt("Guthaben", 0);
    return Guthaben;
}

public int getGetrunkenFromPreference(Context context,String name){
    SharedPreferences Getrunken_User = context.getSharedPreferences(name, 0);
    int Getrunken = Getrunken_User.getInt("Getrunken", 0);
    return Getrunken;
  }
}
 

Ответ №3:

Вы можете изменить его таким образом, а затем, когда вы вызываете конструктор этого класса, передать контекст действия, например, if u create object of User calss in MainActivity.java затем используйте его следующим образом

Пользователь user = новый пользователь («Привет», MainActivity.this);

 public class User extends AppCompatActivity {

private String name;
private int guthaben;
private int getrunken;
private Context context;

public void setName(String name){
    this.name = name;
}

public String getName(){
    return name;
}

public void setGuthaben(int guthaben){
    this.guthaben = guthaben;
}

public int getGuthaben(){
    return guthaben;
}

public void setGetrunken(int getrunken){
    this.getrunken = getrunken;
}

public int getGetrunken(){
    return getrunken;
}


public User(String name, Context context){
    this.name = name;
    this.context = context;
    this.guthaben = getGuthabenFromPreference(this.name);
    this.getrunken = getGetrunkenFromPreference(this.name);
}

public int getGuthabenFromPreference(String name){
    SharedPreferences Guthaben_User = context.getSharedPreferences(name, 0);
    int Guthaben = Guthaben_User.getInt("Guthaben", 0);
    return Guthaben;
}

public int getGetrunkenFromPreference(String name){
    SharedPreferences Getrunken_User = context.getSharedPreferences(name, 0);
    int Getrunken = Getrunken_User.getInt("Getrunken", 0);
    return Getrunken;
}
 

}

Ответ №4:

Добавьте контекст в качестве параметра для функции-члена и вызовите getSharedPreference с этим переданным контекстом, как показано ниже

 public int getGuthabenFromPreference(Context context, String name){
    SharedPreferences Guthaben_User = context.getSharedPreferences(name, 0);
    int Guthaben = Guthaben_User.getInt("Guthaben", 0);
    return Guthaben;
}

public int getGetrunkenFromPreference(Context context,String name){
    SharedPreferences Getrunken_User = context.getSharedPreferences(name, 0);
    int Getrunken = Getrunken_User.getInt("Getrunken", 0);
    return Getrunken;
}