2013-01-18 44 views
-1

我試圖做一個簡單的程序,它使用SharedPreferences保存並檢索字符串。應用程序通常會加載,但如果我點擊按鈕,應用程序會下降我不知道什麼是錯的。 下面是代碼:在SharedPreferences中使用字符串

Shared.java

package com.example.sharedpreferences; 
import android.content.Context; 
import android.content.SharedPreferences; 
public class Shared { 
    SharedPreferences prefe; 
    SharedPreferences.Editor editor; 
    Context mycontext; 
    public Shared(Context context){ 
     mycontext = context; 
     prefe = mycontext.getSharedPreferences("Preference", 0); 
     editor = prefe.edit(); 
    } 
    public void setpref(String name, String value){ 
     editor.putString(name, value); 
     editor.commit(); 
    } 
    public String getvalue(String name){ 
     return prefe.getString(name, "Nothing!");  
    } 
} 

MainActivity.java

package com.example.sharedpreferences; 
import android.os.Bundle; 
import android.app.Activity; 
import android.view.View; 
import android.widget.TextView; 
public class MainActivity extends Activity { 
    Shared preferences; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     preferences = new Shared(getApplicationContext()); 
    } 

    public void btn_send(View button){ 
     TextView name = (TextView)findViewById(R.id.name2); 
     TextView value = (TextView)findViewById(R.id.value2); 
     String names = (String) name.getText(); 
     String values = (String) value.getText(); 
     preferences.setpref(names, values); 
    } 
    public void btn_read(View button){ 
     TextView name = (TextView)findViewById(R.id.name2); 
     TextView value = (TextView)findViewById(R.id.value2); 
     String names = (String) name.getText(); 
     String values = preferences.getvalue(names); 
     value.setText(values); 
    } 
} 

謝謝!

+0

你能發佈logcat的輸出?我的猜測是有一個NullPointerException – Jared

+0

我還沒有見過這種特殊的方法(在一個類中重新使用pref對象)。我想知道在編輯器上調用「commit()」後,編輯器不再可用。你可以嘗試將這個邏輯移到你的活動中,每次都得到一個新的SharedPreferernces和Editor參考嗎?這至少會驗證或無效重新使用對象的方法。這有意義嗎? – EJK

+0

logcat中的錯誤在這裏[link](http://txtup.net/DCml)。 EJK,抱歉,但我不知道你的意思。 – Bullman

回答

0

看來,錯誤是由您的鑄造字符串的字符序列。您可以改用String superString = fromTextEdit.getText().toString();

+0

謝謝!問題在於缺少.toString() – Bullman

0

使用

value.getText().toString() 

//優先級

public static class MyAppPref { 

    public static final String SHARED_PREFERENCE  = "shared_preference"; 
    public static final String SP_TEXT_VALUE   = "sp_text_value"; 
    public static final String SP_TEXT_VALUE_DEFAULT = "Nothing!"; 
    public static final int MODE_PRIVATE    = 0; 

    public static SharedPreferences getPref(Context ctx){ 
     return ctx.getSharedPreferences(SHARED_PREFERENCE , MODE_PRIVATE); 
    } 

    public static void saveTextValue(Context ctx, String value){ 
      getPref(ctx).edit().putString(SP_TEXT_VALUE, value).commit(); 
    } 

    public static String getStoredTextvalue(Context ctx){ 
      return getPref(ctx).getString(SP_TEXT_VALUE, SP_TEXT_VALUE_DEFAULT);  
    } 

} 

// Activity類

//android:onClick="btn_write_pref" 
public void btn_write_pref(View button){ 
    TextView value = (TextView)findViewById(R.id.textview_value); 
    String values = (String) value.getText(); 
    MyAppPref.saveTextValue(this, value.getText().toString()); 
} 
//android:onClick="btn_read_pref" 
public void btn_read_pref(View button){ 
    TextView value = (TextView)findViewById(R.id.textview_value); 
    value.setText(MyAppPref.getStoredTextvalue(this); 
} 
+0

謝謝!這非常有幫助。 – Bullman

0

我只是修改你的代碼,它的樣子與您的代碼。

次活動,

public class Second extends Activity{ 
TextView text1, text2; 
Button send, read; 
Shared preferences; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    preferences = new Shared(getApplicationContext()); 

    text1 = (TextView)findViewById(R.id.text1); 
    text2 = (TextView)findViewById(R.id.text2); 
    send = (Button)findViewById(R.id.button1); 
    send.setOnClickListener(new View.OnClickListener() { 

     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      String names = (String) text1.getText(); 
      String values = (String) text2.getText(); 
      preferences.setpref(names, values+names); 
     } 
    }); 
    read = (Button)findViewById(R.id.button2); 
    read.setOnClickListener(new View.OnClickListener() { 

     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      String names = (String) text1.getText(); 
      String values = preferences.getvalue(names); 
      text2.setText(values); 
     } 
    }); 

} 

}

和你的愛好級別一樣一樣的,你上面提到的什麼(shared.java)

+0

非常感謝。 – Bullman

相關問題