[求大神]这个错误是在哪儿呀,关于SharedPreferences的

Vamo 2016-02-04 01:20:44
学习Android到数据存储了,今天写了个保存密码与自动填充的程序练练手,但是自动填充的时候老是报错,下面是代码
save2和load2是用SharedPreferences来存储和读取的方法
现在只要一调用load2方法就会报错

public class Login_Activity extends BaseActivity implements OnClickListener{

private EditText edt_account;
private EditText edt_password;
private Button btn_login;
private Button btn_show;
private CheckBox checkbox;
private SharedPreferences sp;
private SharedPreferences.Editor editor;

@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.login_activity);
SharedPreferences sp=getSharedPreferences("data2", MODE_PRIVATE);
editor=sp.edit();
edt_account=(EditText)findViewById(R.id.edt_account);
edt_password=(EditText)findViewById(R.id.edt_password);
btn_login=(Button)findViewById(R.id.btn_login);
btn_show=(Button)findViewById(R.id.btn_show);
checkbox=(CheckBox)findViewById(R.id.check);
Boolean checked=sp.getBoolean("check", false);
if (checked) {
Toast.makeText(Login_Activity.this, "读取数据成功", Toast.LENGTH_SHORT).show();
load2();
}
btn_login.setOnClickListener(this);
btn_show.setOnClickListener(this);
}


@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_login:
String account=edt_account.getText().toString();
String password=edt_password.getText().toString();
if (!account.equals(null)&&!password.equals(null)) {
save1();
if (checkbox.isChecked()) {
save2(account, password);
}else{
editor.clear();
}
editor.commit();
Intent intent=new Intent(Login_Activity.this, Main_Activity.class);
startActivity(intent);
}
break;
case R.id.btn_show:
String show=load1();
if (!TextUtils.isEmpty(show)) {
Toast.makeText(Login_Activity.this, show, Toast.LENGTH_SHORT).show();
}
break;

default:
break;
}
}

private void save1() {
FileOutputStream out=null;
BufferedWriter writer = null;
try {
out=openFileOutput("data", MODE_PRIVATE);
writer=new BufferedWriter(new OutputStreamWriter(out));
writer.write(edt_account.getText().toString()+edt_password.getText().toString());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
try {
if (writer!=null) {
writer.close();
}
} catch (IOException e2) {
// TODO: handle exception
e2.printStackTrace();
}
}
}

private String load1() {
FileInputStream in=null;
BufferedReader reader=null;
StringBuilder stringBuilder=new StringBuilder();
try {
in=openFileInput("data");
reader=new BufferedReader(new InputStreamReader(in));
String line="";
while ((line=reader.readLine())!=null) {
stringBuilder.append(line);
}
} catch (IOException e) {
// TODO: handle exception
e.printStackTrace();
}finally{
try {
if (reader!=null) {
reader.close();
}
} catch (IOException e2) {
// TODO: handle exception
e2.printStackTrace();
}
}
return stringBuilder.toString();
}

private void save2(String account,String password) {
editor.putBoolean("check", true);
editor.putString("account", account);
editor.putString("password", password);
}

private void load2() {
edt_account.setText(sp.getString("account", ""));
edt_password.setText(sp.getString("password", ""));
}
}



下面是报错的log
02-04 01:18:23.611: E/ActivityThread(899): mtprof entry can not be found
02-04 01:18:23.611: E/ActivityThread(899): java.io.FileNotFoundException: /proc/mtprof/status: open failed: ENOENT (No such file or directory)
02-04 01:18:23.611: E/ActivityThread(899): at libcore.io.IoBridge.open(IoBridge.java:496)
02-04 01:18:23.611: E/ActivityThread(899): at java.io.FileInputStream.<init>(FileInputStream.java:76)
02-04 01:18:23.611: E/ActivityThread(899): at java.io.FileInputStream.<init>(FileInputStream.java:103)
02-04 01:18:23.611: E/ActivityThread(899): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1494)
02-04 01:18:23.611: E/ActivityThread(899): at android.os.Handler.dispatchMessage(Handler.java:111)
02-04 01:18:23.611: E/ActivityThread(899): at android.os.Looper.loop(Looper.java:194)
02-04 01:18:23.611: E/ActivityThread(899): at android.app.ActivityThread.main(ActivityThread.java:5692)
02-04 01:18:23.611: E/ActivityThread(899): at java.lang.reflect.Method.invoke(Native Method)
02-04 01:18:23.611: E/ActivityThread(899): at java.lang.reflect.Method.invoke(Method.java:372)
02-04 01:18:23.611: E/ActivityThread(899): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:959)
02-04 01:18:23.611: E/ActivityThread(899): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:754)
02-04 01:18:23.611: E/ActivityThread(899): Caused by: android.system.ErrnoException: open failed: ENOENT (No such file or directory)
02-04 01:18:23.611: E/ActivityThread(899): at libcore.io.Posix.open(Native Method)
02-04 01:18:23.611: E/ActivityThread(899): at libcore.io.BlockGuardOs.open(BlockGuardOs.java:186)
02-04 01:18:23.611: E/ActivityThread(899): at libcore.io.IoBridge.open(IoBridge.java:482)
02-04 01:18:23.611: E/ActivityThread(899): ... 10 more
02-04 01:18:24.045: E/AndroidRuntime(899): FATAL EXCEPTION: main
02-04 01:18:24.045: E/AndroidRuntime(899): Process: com.example.login2, PID: 899
02-04 01:18:24.045: E/AndroidRuntime(899): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.login2/com.baozi.login2.Login_Activity}: java.lang.NullPointerException: Attempt to invoke interface method 'java.lang.String android.content.SharedPreferences.getString(java.lang.String, java.lang.String)' on a null object reference
02-04 01:18:24.045: E/AndroidRuntime(899): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2581)
02-04 01:18:24.045: E/AndroidRuntime(899): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2656)
02-04 01:18:24.045: E/AndroidRuntime(899): at android.app.ActivityThread.access$800(ActivityThread.java:178)
02-04 01:18:24.045: E/AndroidRuntime(899): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1512)
02-04 01:18:24.045: E/AndroidRuntime(899): at android.os.Handler.dispatchMessage(Handler.java:111)
02-04 01:18:24.045: E/AndroidRuntime(899): at android.os.Looper.loop(Looper.java:194)
02-04 01:18:24.045: E/AndroidRuntime(899): at android.app.ActivityThread.main(ActivityThread.java:5692)
02-04 01:18:24.045: E/AndroidRuntime(899): at java.lang.reflect.Method.invoke(Native Method)
02-04 01:18:24.045: E/AndroidRuntime(899): at java.lang.reflect.Method.invoke(Method.java:372)
02-04 01:18:24.045: E/AndroidRuntime(899): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:959)
02-04 01:18:24.045: E/AndroidRuntime(899): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:754)
02-04 01:18:24.045: E/AndroidRuntime(899): Caused by: java.lang.NullPointerException: Attempt to invoke interface method 'java.lang.String android.content.SharedPreferences.getString(java.lang.String, java.lang.String)' on a null object reference
02-04 01:18:24.045: E/AndroidRuntime(899): at com.baozi.login2.Login_Activity.load2(Login_Activity.java:144)
02-04 01:18:24.045: E/AndroidRuntime(899): at com.baozi.login2.Login_Activity.onCreate(Login_Activity.java:51)
02-04 01:18:24.045: E/AndroidRuntime(899): at android.app.Activity.performCreate(Activity.java:6144)
02-04 01:18:24.045: E/AndroidRuntime(899): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1115)
02-04 01:18:24.045: E/AndroidRuntime(899): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2528)
02-04 01:18:24.045: E/AndroidRuntime(899): ... 10 more

...全文
444 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
Vamo 2016-02-04
  • 打赏
  • 举报
回复
引用 1 楼 bossanovo的回复:
我看到的问题是这样的: 注意sp变量,你在oncreate方法之外引用的sp都是空引用,因为在oncreate方法中,你定义的sp覆盖了类变量的sp.解决方法是将cocreate方法的变量声明类型去掉,从而给类的sp初始化
感谢!终于发现错误的原因了!当时复制的时候粗心了!
bossanovo 2016-02-04
  • 打赏
  • 举报
回复
我看到的问题是这样的: 注意sp变量,你在oncreate方法之外引用的sp都是空引用,因为在oncreate方法中,你定义的sp覆盖了类变量的sp.解决方法是将cocreate方法的变量声明类型去掉,从而给类的sp初始化

80,337

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧