#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;
}