【发布时间】:2015-09-11 11:13:51
【问题描述】:
我想要我的应用程序中的语言更改功能,它可以提供用户功能以从 设置 更改应用程序语言,但一开始我希望打开默认应用程序,所以我创建了虚拟项目来测试我正在访问的地方来自一个定义语言因素的类的语言偏好 这里是它的代码(显然我知道我没有以正确的方式使用 sharedPreference 并且我知道错误是因为这个所以请帮助在这个应用程序中设置共享偏好):
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();
}
}
}
还有一个按钮来更改设置中的应用程序语言这里是它的代码:
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();
}
});
}
如果语言是不同的代码,我正在更改文本值的主要活动:
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");
}
}
我正在使用共享首选项来保存数据,但在开始时活动关闭并且没有响应错误显示。任何帮助表示赞赏。
错误日志:
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
【问题讨论】:
-
抱歉在代码上添加了 edit().commit 但仍然关闭
-
如果我删除 LanguagePreferences l = new LanguagePreferences();从主要活动中删除它的依赖错误消失了我知道它与java有关但我是java的初学者请任何建议
-
很明显你有一个
NullPointerException。最后查看错误日志的第 4 行。这意味着您对具有空值的对象执行操作。通常这是因为你在它上面调用了一个方法。检查您的 LanguagePreference 第 18 行。 -
大约在您的日志中间您会看到
Caused by: java.lang.NullPointerException。从那里向下走每一行,直到您看到自己的班级。在那里你看到它说LanguagePreferences.java:18。这意味着您需要在第 18 行检查该文件;) -
这一行导致错误,我通过调试知道它,你也确认 SharedPreferences settings=getSharedPreferences("myfile", Context.MODE_PRIVATE);但你能告诉我这不是使用共享偏好的正确方式吗
标签: java android android-activity sharedpreferences