1

最初に-私の英語で申し訳ありません;)私はAndroid用のプロファイルマネージャーを書いています、そして私はいくつかのSharedPreferencesファイルからgetStringが欲しいですそしてlistViewを作成します。それは私のコードの一部です:

private static final String PN = "profile_name";
private EditTextPreference editText;
private SharedPreferences preferences;

public class Profile_Preferences extends PreferenceActivity {

...

private void SavePreferences() {

    String text= editText.getText().toString();
    preferences = getSharedPreferences("Profile_" + text, Activity.MODE_PRIVATE);  //Here we created SharedPreferences file with name "Profile_"+ this what user write in editText

    SharedPreferences.Editor preferencesEditor = preferences.edit();
    preferencesEditor.putString(PN, editText.getText());
    preferencesEditor.commit();

Ok。ユーザーがいくつかのプロファイルを実行していたため、たとえば、Profile_home.xml、Profile_work.xml、Profile_something.xmlなどのファイルがあります。ここで、このファイルからプロファイル名を使用してlistViewを作成しません。それは私の次の活動です:

public class Tab_profiles extends ListActivity {

ArrayList<String> listItems = new ArrayList<String>();  
ArrayAdapter<String> adapter; 

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.list);

    adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_multiple_choice, listItems);
    setListAdapter(adapter);
 ...

public void LoadList() {        

 //It's a good idea to getString "profile_name" form every xml file with name "Profile_" + "" ? 
    preferences = getSharedPreferences("Profile_"+ "", Activity.MODE_PRIVATE);

    String take_profile_name = preferences.getString("profile_name", null);
    listItems.add(take_profile_name );
    adapter.notifyDataSetChanged();

}

しかし、これは機能しません... logcatログ:

FATAL EXCEPTION: MAIN 
java.land.Null.PointerException
at android.widget.ArrayAdaper.createViewFromResource(ArrayAdapter.java:355)
...

私は今それが間違っているとは思わない...

私を助けてください:)答えてくれてありがとう、そして私の書き込みとコードの誤りをお詫びします;)

4

1 に答える 1

2

コードにはいくつかの問題があります。

String text = editText.getText().toString();
preferences = getSharedPreferences("Profile_" + text, Activity.MODE_PRIVATE);

SharedPreferences.Editor preferencesEditor = preferences.edit();
preferencesEditor.putString(PN, editText.getText());

ユーザーが EditText に「home」と入力した場合、「Profile_home」という設定ファイルを作成し、その名前を同じファイルに保存しますか? ユーザーが生成したファイル名を、既知の名前を持つ別のファイルに保存して、コードでアクセスできるようにする必要があります。

2番目の問題:

preferences = getSharedPreferences("Profile_" + "", Activity.MODE_PRIVATE);
String take_profile_name = preferences.getString("profile_name", null);

「Profile_」設定を開こうとしています。このファイルは存在しません(?)。getString の 2 番目のパラメーターは null であってはなりません。そうしないと、文字列のリストに null 参照が追加され、失敗します。空の文字列 "" に置き換えます。

編集:すべてのカスタム名前付き設定を取得するための小さな回避策は次のとおりです。

private void SavePreferences() {
    String text = editText.getText().toString();
    preferences = getSharedPreferences("ProfileNames", Activity.MODE_PRIVATE);
    SharedPreferences.Editor preferencesEditor = preferences.edit();
    // increment index by 1
    preferencesEditor.putInt("profile_count", preferences.getInt("profile_count", 0) + 1);
    // save new name in ProfileNames.xml with key "name[index]"
    preferencesEditor.putString("name" + (preferences.getInt("profile_count", 0) + 1), editText.getText());
    preferencesEditor.commit();
}

public void LoadList() {        
    preferences = getSharedPreferences("ProfileNames", Activity.MODE_PRIVATE);
    List<String> profileNames = new LinkedList<String>();
    int profileCount = preferences.getInt("profile_count", 0);
    for (int i = 1; i <= profileCount; i++) {
        profileNames.add(preferences.getString(name + i, ""));
    }
    listItems.addAll(profileNames);
    adapter.notifyDataSetChanged();
}
于 2012-02-15T22:14:35.210 に答える