我正在制作需要用户名才能运行的程序。在设置中,意图正常工作,直到我添加共享首选项代码。我可能把它添加到了错误的地方。否则意图工作得非常好。共享首选项也不保存字符串。它一直在崩溃。有什么想法吗?
package com.XXX.XXX;
import android.app.Activity;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
public class Settings extends Activity{
EditText nameXML;
SharedPreferences filename;
public String name;
String filenamename = "nameFile";
Button save = (Button) findViewById(R.id.button1);
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_settings);
nameXML = (EditText) findViewById(R.id.editText1);
filename = getSharedPreferences(filenamename,0);
String username = filename.getString("nameString", "Master Traders");
nameXML.setHint(username);
name = nameXML.getText().toString();
save.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Editor nameEditor = filename.edit();
nameEditor.putString("nameString", name);
nameEditor.commit();
}
});
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
}
}
答案 0 :(得分:1)
Button save = (Button) findViewById(R.id.button1);
更改为:
Button save;
@Override
protected void onCreate(Bundle savedInstanceState) {
save = (Button) findViewById(R.id.button1);//this line is before onclicklistener.
save.setOnclickListner(new View.OnClickListener() {
@Override
public void onClick(View v) {
name = nameXML.getText().toString();
Editor nameEditor = filename.edit();
nameEditor.putString("nameString", name);
nameEditor.commit();
}
});
}
你应该发布logcat进一步看看问题是什么。但最有可能的原因是@Reid提出的建议。添加了新的更新代码。
答案 1 :(得分:0)
您正在创建一个editText并仅为其提供提示,然后尝试从onCreate()
中获取所有内容。
当用户单击“保存”时,您需要从editText获取文本。
所以试试
name = nameXML.getText().toString();
在onClickListener中。
否则你试图从空的editText中获取一个字符串。