-1
나는 안드로이드에서 새로운 것으로 플래그 퀴즈를 작성하려고합니다.java.lang.ClassCastException : java.util.Set에 java.lang.String을 캐스팅 할 수 없습니다.
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>
어떤 제안?