2013-07-18 85 views
1

我正在做这个程序,需要用户名才能运行。在设置中,意图工作正常,直到我添加共享首选项代码。我可能会把它添加到错误的地方。否则,意图工作得很好。此外,共享首选项不会保存字符串。它不断崩溃。有任何想法吗?SharedPreferencs崩溃程序

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(); 

} 




} 

回答

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提出的。新的更新代码被添加。

+0

谢谢,但SharedPreferences没有保存名称。 – Nebraska

0

您正在创建一个editText并仅提供一个提示,然后试图从onCreate()中获取所有内容。 当用户单击保存时,您需要从editText获取文本。 所以试试吧

name = nameXML.getText().toString(); 

在onClickListener。

否则你试图从空的editText获得一个字符串。