I want language change feature in my app which can provide user feature to change application language from settings but at start i want default application to open so i created dummy project to test it where i am accessing Langugage preference from a class which is defining factor for language Here its code(Clearly I know I am not using sharedPreference the right way and i know the error was because of that so please help in setting shared preference in this app):
public class LanguagePreferences extends Activity { public int language; int check; SharedPreferences settings = getSharedPreferences("mysettings", Context.MODE_PRIVATE); public LanguagePreferences() { language=settings.getInt("language", 0); } public void changeLang() { check=settings.getInt("language",0); if(check==0) { settings.edit().putInt("language", 1); settings.edit().comment(); } else { settings.edit().putInt("language", 1); settings.edit().comment(); } } } and a button to change application Language in settings Here its Code:
protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.change); btnLang=(Button)findViewById(R.id.change); btnLang.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub LanguagePreferences l= new LanguagePreferences(); l.changeLang(); } }); } and main Activity where i am changing text value if language is different code:
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); TextView tv = (TextView) findViewById(R.id.text); Button btnLang = (Button) findViewById(R.id.buttonlang); SharedPreferences settings = getSharedPreferences("mysettings", Context.MODE_PRIVATE); btnLang.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub Intent i = new Intent(MainActivity.this, Change.class); startActivity(i); } }); LanguagePreferences l = new LanguagePreferences(); if (l.language == 0) { tv.setText("Germany"); } else { tv.setText("English"); } } I am using shared preferences to save data but at start activity closes and not responding error shows. Any Help is appreciated.
Error Log:
09-11 17:44:26.200: D/AndroidRuntime(13952): Shutting down VM 09-11 17:44:26.200: W/dalvikvm(13952): threadid=1: thread exiting with uncaught exception (group=0x414112a0) 09-11 17:44:26.208: E/AndroidRuntime(13952): FATAL EXCEPTION: main 09-11 17:44:26.208: E/AndroidRuntime(13952): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.dummy/com.example.dummy.MainActivity}: java.lang.NullPointerException 09-11 17:44:26.208: E/AndroidRuntime(13952): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2097) 09-11 17:44:26.208: E/AndroidRuntime(13952): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2122) 09-11 17:44:26.208: E/AndroidRuntime(13952): at android.app.ActivityThread.access$600(ActivityThread.java:140) 09-11 17:44:26.208: E/AndroidRuntime(13952): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1228) 09-11 17:44:26.208: E/AndroidRuntime(13952): at android.os.Handler.dispatchMessage(Handler.java:99) 09-11 17:44:26.208: E/AndroidRuntime(13952): at android.os.Looper.loop(Looper.java:137) 09-11 17:44:26.208: E/AndroidRuntime(13952): at android.app.ActivityThread.main(ActivityThread.java:4895) 09-11 17:44:26.208: E/AndroidRuntime(13952): at java.lang.reflect.Method.invoke(Method.java:511) 09-11 17:44:26.208: E/AndroidRuntime(13952): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:994) 09-11 17:44:26.208: E/AndroidRuntime(13952): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:761) 09-11 17:44:26.208: E/AndroidRuntime(13952): at dalvik.system.NativeStart.main(Native Method) 09-11 17:44:26.208: E/AndroidRuntime(13952): Caused by: java.lang.NullPointerException 09-11 17:44:26.208: E/AndroidRuntime(13952): at android.content.ContextWrapper.getApplicationContext(ContextWrapper.java:101) 09-11 17:44:26.208: E/AndroidRuntime(13952): at com.example.dummy.LanguagePreferences.<init>(LanguagePreferences.java:18) 09-11 17:44:26.208: E/AndroidRuntime(13952): at com.example.dummy.MainActivity.onCreate(MainActivity.java:36) 09-11 17:44:26.208: E/AndroidRuntime(13952): at android.app.Activity.performCreate(Activity.java:5163) 09-11 17:44:26.208: E/AndroidRuntime(13952): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1094) 09-11 17:44:26.208: E/AndroidRuntime(13952): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2061) 09-11 17:44:26.208: E/AndroidRuntime(13952): ... 11 more 09-11 17:44:43.325: I/Process(13952): Sending signal. PID: 13952 SIG: 9
NullPointerException. See the 4th line of your error log at the end. This means that you perform an operation on an object with the null value. Usually this is because you call a method on it. Check your LanguagePreference line 18.Caused by: java.lang.NullPointerException. From there go down each line until you see a class of your own. There you see it saysLanguagePreferences.java:18. That means you need to check that file on line 18 ;)