Java 按SharedReferences/Logcat错误
我调试了我的应用程序,得到了以下错误提示:Java 按SharedReferences/Logcat错误,java,android,Java,Android,我调试了我的应用程序,得到了以下错误提示: java.lang.NullPointerException at com.simonic.filmstudio.LogActivity$1.onClick(LogActivity.java:42) at android.view.View.performClick(View.java:4752) at android.view.View$PerformClick.run(View.java:19561)
java.lang.NullPointerException
at com.simonic.filmstudio.LogActivity$1.onClick(LogActivity.java:42)
at android.view.View.performClick(View.java:4752)
at android.view.View$PerformClick.run(View.java:19561)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:146)
at android.app.ActivityThread.main(ActivityThread.java:5635)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1291)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1107)
at dalvik.system.NativeStart.main(Native Method)
Log.Activity.java:42
是这一行:editor=sharedPrefs.edit()代码>
这就是代码的其余部分:
package com.simonic.filmstudio;
import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class LogActivity extends Activity {
//Buttons
Button startbutton;
//Variablen
EditText edtext;
String pname;
//Daten
SharedPreferences sharedPrefs;
SharedPreferences.Editor editor;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
//Buttons
startbutton = (Button)findViewById(R.id.startbutt);
//EDTEXT
edtext = (EditText)findViewById(R.id.editText); //SpielerName
startbutton.setOnClickListener(new View.OnClickListener() { //Register Start Button
@Override
public void onClick(View v) {
if (edtext.getText().toString().trim().isEmpty()) {
Toast toast = new Toast(getApplicationContext());
toast.setGravity(100, 100, 100);
String nopname = "@string/nopname";
Toast.makeText(LogActivity.this, nopname, Toast.LENGTH_SHORT).show();
} else {
editor = sharedPrefs.edit();
pname = edtext.getText().toString();
editor.putString("pname", pname);
editor.putBoolean("regstat", true);
editor.apply();
startStudac();
}
}
});
}
public void startStudac(){
Intent intent = new Intent(LogActivity.this, StudioReg.class);
startActivity(intent);
overridePendingTransition(R.anim.abc_fade_in, R.anim.abc_fade_out);
}
@Override
protected void onStart() {
super.onStart();
}
@Override
protected void onRestart() {
super.onRestart();
}
@Override
protected void onResume() {
super.onResume();
}
@Override
protected void onPause() {
super.onPause();
}
@Override
protected void onStop() {
super.onStop();
}
@Override
protected void onDestroy() {
super.onDestroy();
}
}
我希望你能帮助我 在分配任何内容之前,您正在使用sharedPrefs。所以它是空的,因此出现了NullPointerException
要获取SharedReferences引用,由于您在匿名内部类中,您需要:
sharedPrefs = MyActivity.this.getSharedPreferences();
就你而言:
sharedPrefs = LogActivity.this.getSharedPreferences();
作为建议,我将sharedPrefs
和首选项编辑器设置为onClick()方法的本地选项,因为您在活动的其他部分中没有使用它们解决方案1:
而不是
String nopname = "@string/nopname";
写-
String nopname = "Simon";
解决方案2:
在strings.xml文件中写入:
<string name="nopname">Simon</string>
是的,但在任何其他上下文中,例如xml文件中的按钮等。它与“@string/nopname”一起工作。。。我想用其他语言翻译我的应用程序,因此我必须使用字符串。在这种情况下,为什么它不能与@string一起工作?你能帮我解决我的主要问题吗?共享偏好?
String nopname = getApplicationContext().getResources().getString(R.string.nopname);