2014-10-30 204 views
0

我正在制作一个简单的android应用程序,该应用程序使用共享首选项保存用户名和电子邮件地址。但问题是,每当我声明共享首选项时,应用程序崩溃。当我删除共享首选项代码时,该应用程序运行良好。使用共享首选项时Android应用程序崩溃

有人可以看到问题吗?

这里是我的代码:

public class PreferencesActivity extends Activity implements OnClickListener { 
private TextView textUserName; 
private TextView textEmail; 
private String userName; 
private String email; 
public static final String MyPREFERENCES = "MyPrefs" ; 

SharedPreferences sharedPref; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    sharedPref = this.getSharedPreferences(MyPREFERENCES, Context.MODE_PRIVATE); 
    setContentView(R.layout.activity_preferences); 

    textUserName = (TextView)findViewById(R.id.txtUserName); 
    userName = textUserName.getText().toString(); 
    textEmail = (TextView)findViewById(R.id.txtEmail2); 
    email = textEmail.getText().toString(); 

    Button saveButton = (Button)findViewById(R.id.btnSave); 
    saveButton.setOnClickListener(this); 
} 

@Override 
public void onClick(View v) { 

    Editor editor = sharedPref.edit(); 

    if(v.getId() == R.id.btnSave) { 
     editor.putString(userName, email); 
     editor.commit(); 
    } 
} 
} 

编辑

的logcat:

10-30 20:41:25.246: E/AndroidRuntime(2797): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.lab4ex1preferencesactivity/com.example.lab4ex1preferencesactivity.Prefe rencesActivity}: java.lang.ClassCastException: android.widget.EditText cannot be cast to android.widget.Button 
+0

发布例外的LogCat – panini 2014-10-30 20:38:16

+0

编辑帖子逻辑 – Bouss 2014-10-30 20:47:08

+0

您100%确定''''''''''''''''''''''''''''activity_preferences.xml''中的'''btnSave'属于'''Button'''类型。而不是''EditText'''? – 2014-10-30 20:53:52

回答

1

您收到此:

java.lang.ClassCastException: android.widget.EditText cannot be cast to android.widget.Button 

所以基本上是在说你投EditTextButton。这将是以下行:

Button saveButton = (Button)findViewById(R.id.btnSave); 

所以,除非你使用了错误的ID和btnSave实际上指的是EditText场,这是一个小故障。这很可能是Eclipse中的一个小故障。以下是通常的修复方法(这很常见):

转到顶部的选项卡并选择Project > Clean...并清理项目。

+1

非常感谢,解决了这个问题! – Bouss 2014-10-30 20:56:15

+0

@布斯很高兴帮助。 – 2014-10-30 20:57:01

1

错误消息说:“您将文本框投到按钮”。你是否给出了小部件的正确名称?核实!