2015-12-22 27 views
0

抱歉這個簡單的問題,但即時通訊新的這一點。 我有這樣的代碼:保存使用.putString和更高版本使用它作爲類

public void English (View view) { 
     if (toggleButton.isChecked()) { 
      SharedPreferences sharedPref = this.getPreferences(Context.MODE_PRIVATE); 
      SharedPreferences.Editor editor = sharedPref.edit(); 
      editor.putString("selectedlanguage", "English"); 
      editor.commit(); 
      Toast.makeText(getBaseContext(), sharedPref.getString("selectedlanguage", null) + " is the default page", Toast.LENGTH_SHORT).show(); 
      English(); 
     } 
     else English(); 

供以後使用我想用editor.putString("selectedlanguage", "English");「英語」作爲類名稱。

像這樣:

if (sharedPref.getString("selectedlanguage", null) != null) { 
//use the "English" as class name so it will execute the class 
} 
+0

您可以使用Class.forName(「」) –

+0

這是實現您的目標的唯一方法嗎?爲什麼不'if(sharedPref.getString(「selectedLanguage」,「default_val」)。equals(「English」)){new English(); ''? – PPartisan

+0

@ ashish-agrawal你能舉個例子嗎?我試圖做你的建議,但說班級沒有發現異常 –

回答

1

去把你的問題和意見,我假設你只需要創建一個基於關存儲在SharedPreferences值的類。我還假設你想創建幾種「語言」,並從SharedPreferences值中啓動適當的類。爲此,我將使用Factory pattern

首先,創建一個「語言」 interface一個包含所有語言類的常用方法:

public interface Language { 

    //Example 
    void speak(); 

} 

其次,把所有的語言類實現這個接口:

public class English implements Language { 

    @Override 
    public void speak() { 
     Log.i("Tag", "English"); 
    } 

} 

public class Chinese implements Language { 

    @Override 
    public void speak() { 
     Log.i("Tag", "Chinese"); 
    } 

} 

三,創建建立一個工廠類的 「語言」 課程:

public class LanguageFactory { 

    public static final int LANGUAGE_ENGLISH = 100; 
    public static final int LANGUAGE_CHINESE = 101; 

    public Language getLanguage(int code) { 

     Language language = null; 

     switch (code) { 
      case LANGUAGE_ENGLISH: 
       language = new English(); 
       break; 
      case LANGUAGE_CHINESE: 
       language = new Chinese(); 
       break; 
     } 

     return language; 

    } 

} 

現在,只要您保存到共享偏好,使用:

SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(this); 
SharedPreferences.Editor editor = sharedPref.edit(); 

editor.putInt("selectedlanguage", LanguageFactory.LANGUAGE_ENGLISH); 
editor.commit(); 

然後,當你想使用儲值:

int languageCode = sharedPref.getInt("selectedLanguage", -1); 

LanguageFactory factory = new LanguageFactory(); 

Language language = factory.getLanguage(languageCode); 

在這種情況下,「語言」會「英語「,但它會根據您存儲的」代碼「更改爲SharedPreferences。這是一個非常靈活的系統,可以讓您在將來添加新的語言,而且當您使用常量時,由於提供錯誤值而導致錯誤的可能性要小得多。

+0

謝謝你很多! @ppartisan –

0

請參閱本

Class<?> c = null; 
if(StringClassname != null) { 
    try { 
     c = Class.forName(StringClassname); 
    } catch (ClassNotFoundException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
} 
+0

正如我所說的即時通訊新的這一點,無法弄清楚,不斷返回null –

相關問題