2017-11-18 9 views
-1

私はアンドロイドで新しく、フラグクイズを作成しようとしています。java.lang.ClassCastException:java.lang.Stringはjava.util.Setにキャストできません

import android.content.Intent; 
    import android.content.SharedPreferences; 
    import android.content.pm.ActivityInfo; 
    import android.content.res.Configuration; 
    import android.os.Bundle; 
    import android.preference.PreferenceFragment; 
    import android.preference.PreferenceManager; 
    import android.support.design.widget.FloatingActionButton; 
    import android.support.design.widget.Snackbar; 
    import android.support.v7.app.AppCompatActivity; 
    import android.support.v7.widget.Toolbar; 
    import android.view.View; 
    import android.view.Menu; 
    import android.view.MenuItem; 
    import android.widget.Toast; 
    import java.util.Set; 

    public class MainActivity extends AppCompatActivity { 

public static final String CHOICES="pref_numberOfChoices"; 
public static final String REGIONS="pref_regionsToInclude"; 

private boolean phoneDevice=true; 
private boolean preferencesChanged=true; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 

    int screenSize=getResources().getConfiguration().screenLayout & 
      Configuration.SCREENLAYOUT_SIZE_MASK; 
    if(screenSize==Configuration.SCREENLAYOUT_SIZE_LARGE || 
      screenSize==Configuration.SCREENLAYOUT_SIZE_XLARGE) 
     phoneDevice=false; 

    if(phoneDevice) 
     setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 

    PreferenceManager.setDefaultValues(this,R.xml.preferences,false); 
    PreferenceManager.getDefaultSharedPreferences(this). 
      registerOnSharedPreferenceChangeListener(preferencesChangeListener); 
    SharedPreferences sharedPreferences=(SharedPreferences) PreferenceManager.getDefaultSharedPreferences(this); 
    SharedPreferences.Editor editor=sharedPreferences.edit(); 
    Set<String> regions=sharedPreferences.getStringSet(REGIONS,null); 
    if (regions.size() == 0) { 
     regions.add(getString(R.string.default_region)); 
     editor.putStringSet(REGIONS, regions); 
     editor.apply(); 
    } 
} 

@Override 
protected void onStart() 
{ 
    super.onStart(); 
    if(preferencesChanged) 
    { 
     MainActivityFragment quizFragment=(MainActivityFragment) 
       getSupportFragmentManager().findFragmentById(R.id.quizFragment); 
     quizFragment.updateGuessRows(PreferenceManager.getDefaultSharedPreferences(this)); 
     quizFragment.updateRegions(PreferenceManager.getDefaultSharedPreferences(this)); 
     quizFragment.resetQuiz(); 
     preferencesChanged=false; 
    } 
} 

private SharedPreferences.OnSharedPreferenceChangeListener preferencesChangeListener= 
     new SharedPreferences.OnSharedPreferenceChangeListener() { 
      @Override 
      public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String s) { 
       preferencesChanged = true; 
       MainActivityFragment quizFragment = (MainActivityFragment) getSupportFragmentManager(). 
         findFragmentById(R.id.quizFragment); 
       if (s.equals(REGIONS)) { 
        Set<String> regions = sharedPreferences.getStringSet(REGIONS, null); 
        if (regions.size() == 0) { 
         SharedPreferences.Editor editor = sharedPreferences.edit(); 
         regions.add(getString(R.string.default_region)); 
         editor.putStringSet(REGIONS, regions); 
         editor.apply(); 
         Toast.makeText(MainActivity.this, R.string.default_region_message, Toast.LENGTH_SHORT).show(); 
        } 
       } 
       Toast.makeText(MainActivity.this, R.string.restarting_quiz, Toast.LENGTH_SHORT).show(); 
      } 
     }; 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    int orientation=getResources().getConfiguration().orientation; 
    if(orientation== Configuration.ORIENTATION_PORTRAIT) { 
     getMenuInflater().inflate(R.menu.menu_main, menu); 
     return true; 
    } 
    else 
     return false; 
} 


@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    Intent preferencesIntent=new Intent(this,SettingsActivity.class); 
    startActivity(preferencesIntent); 
    return super.onOptionsItemSelected(item); 
}} 

これがあるpreferences.xmlは次のとおりです。これは私のMainActivityある

Set<String> regions=sharedPreferences.getStringSet(REGIONS,null); 

:なぜなら私のMainActivityでこの線の

java.lang.ClassCastException: java.lang.String cannot be cast to 
    java.util.Set 

:私は私のプログラムを実行すると、私はこのエラーを取得します:

<PreferenceScreen 
xmlns:android="http://schemas.android.com/apk/res/android"> 

<ListPreference 
    android:entries="@array/guesses_list" 
    android:entryValues="@array/guesses_list" 
    android:key="pref_numberOfChoices" 
    android:title="@string/number_of_choices" 
    android:summary="@string/number_of_choices_description" 
    android:persistent="true" 
    android:defaultValue="4" /> 

<MultiSelectListPreference 
    android:entries="@array/regions_list_for_settings" 
    android:entryValues="@array/regions_list" 
    android:key="pref_regionsToInclude" 
    android:title="@string/world_regions" 
    android:summary="@string/world_regions_description" 
    android:persistent="true" 
    android:defaultValue="@array/regions_list"/> 

</PreferenceScreen> 

これはarrays.xml:

<resources> 

<string-array name="regions_list"> 
    <item>Africa</item> 
    <item>Asia</item> 
    <item>Europe</item> 
    <item>North_America</item> 
    <item>Oceania</item> 
    <item>South_America</item> 
</string-array> 

<string-array name="regions_list_for_settings"> 
    <item>Africa</item> 
    <item>Asia</item> 
    <item>Europe</item> 
    <item>North America</item> 
    <item>Oceania</item> 
    <item>South America</item> 
</string-array> 

<string-array name="guesses_list"> 
    <item>2</item> 
    <item>4</item> 
    <item>6</item> 
    <item>8</item> 
</string-array> 

任意の提案ですか?

答えて

0

ドキュメントを参照すると、pref_regionsToIncludeSetのキーではありません。

getStringSet Returns the preference values if they exist, or defValues. Throws ClassCastException if there is a preference with this name that is not a Set. This value may be null

詳細

ためのチェック here
関連する問題