-1

Я создал класс, который помогает мне обрабатывать аутентификацию (сохранить Cookie в SharedPrefs).Сохранение строки (Cookie) в SharedPrefs вызвало NullPointerException

public class Authentication extends Application { 

    String PREFS_NAME = "UserData"; 
    String DEFAULT = ""; 

    Context context; 
    public static SharedPreferences sharedPreferences; 
    public static SharedPreferences.Editor editor; 
    public static String token; 

    public Authentication(Activity context) { 
     this.context = context; 
     sharedPreferences = context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE); 
     editor = sharedPreferences.edit(); 
     token = sharedPreferences.getString("Cookie", DEFAULT); 
    } 

    //speichert Token in den Shared Preferences 
    public static void setToken(String token) { 
     Log.d("Cookie", token); 
     editor.putString("Cookie", token); 
     } 
} 

Когда я называю Authentication.setToken(token) -метода мой ответ (RegisterActivity) я буду получать NullPointerException:

java.lang.NullPointerException: Attempt to invoke interface method 'android.content.SharedPreferences$Editor android.content.SharedPreferences$Editor.putString(java.lang.String, java.lang.String)' on a null object reference

Может кто-нибудь из вас помочь мне решить эту Prob? Заранее спасибо

+1

Удалить статический ключевое слово из метода 'setToken' и попробуйте –

+0

, где вы получаете 'String token'? –

+0

Я предполагаю, что вы вызываете 'setToken()', не вызывая 'Authentication()' раньше ... так что ваш 'редактор' не инициализирован – Opiatefuchs

ответ

2

Вы не регистрируете свое приложение в его явном виде. или первый createonject из Authentication с кодом первым зарегистрировать его в manifiest

изменения вашей аутентификации с

import android.app.Application; 
import android.content.Context; 
import android.content.SharedPreferences; 
import android.util.Log; 

public class Authentication extends Application { 
    String PREFS_NAME = "UserData"; 
    String DEFAULT = ""; 
    Context context; 
    public static SharedPreferences sharedPreferences; 
    public static SharedPreferences.Editor editor; 
    public static String token; 

    public Authentication() { 
     super(); 
    } 

    @Override 
    public void onCreate() { 
     super.onCreate(); 
     context = this; 
     sharedPreferences = getSharedPreferences(PREFS_NAME, 
       Context.MODE_PRIVATE); 
     editor = sharedPreferences.edit(); 
     token = sharedPreferences.getString("Cookie", DEFAULT); 
    } 

    // speichert Token in den Shared Preferences 
    public static void setToken(String token) { 
     Log.d("Cookie", token); 
     if(editor==null){ 
      throw new NullPointerException("Register your application "+Authentication.class+" in AndroidManifiest.xml"); 
     } 
     editor.putString("Cookie", token); 
    } 

} 

AndroidManifiest.xml

<application 
     android:name="com.android.Authentication" 
     android:icon="@mipmap/ic_launcher_home" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme.blue" 
     > 
. 
. 
. 
<activity.../> 
<service.../> 

    </application> 
+0

ok ... этот способ не вызывает исключение NullPointerException, но мой токен не сохраняется в SharedPrefs ... любое предложение? – Andy

+0

ах ... Nevermind! Вы забыли называть 'editor.apply()'! Теперь он отлично работает, спасибо :) – Andy

Смежные вопросы