- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我使用 Android 模板创建了一个设置 Activity 。首先,一切正常,但现在我想从 EditTextPreference
获取 String
。但是当我开始运行它时,它因以下错误而崩溃:
java.lang.ClassCastException: java.lang.Boolean cannot be cast to java.lang.String
我使用了正确的 Key 和 getString 方法。由于每次我想打开“设置”时都会发生这种情况,我的应用程序崩溃并且出现错误:
2020-02-01 17:22:55.260 24468-24468/de.fabipfolix.vertretungsplan E/AndroidRuntime: FATAL EXCEPTION: main
Process: de.fabipfolix.vertretungsplan, PID: 24468
java.lang.ClassCastException: java.lang.Boolean cannot be cast to java.lang.String
at android.app.SharedPreferencesImpl.getString(SharedPreferencesImpl.java:288)
at androidx.preference.Preference.getPersistedString(Preference.java:1686)
at androidx.preference.EditTextPreference.onSetInitialValue(EditTextPreference.java:106)
at androidx.preference.Preference.onSetInitialValue(Preference.java:1614)
at androidx.preference.Preference.dispatchSetInitialValue(Preference.java:1587)
at androidx.preference.Preference.onAttachedToHierarchy(Preference.java:1311)
at androidx.preference.Preference.onAttachedToHierarchy(Preference.java:1326)
at androidx.preference.PreferenceGroup.addPreference(PreferenceGroup.java:249)
at androidx.preference.PreferenceGroup.addItemFromInflater(PreferenceGroup.java:170)
at androidx.preference.PreferenceInflater.rInflate(PreferenceInflater.java:345)
at androidx.preference.PreferenceInflater.rInflate(PreferenceInflater.java:346)
at androidx.preference.PreferenceInflater.inflate(PreferenceInflater.java:157)
at androidx.preference.PreferenceInflater.inflate(PreferenceInflater.java:109)
at androidx.preference.PreferenceManager.inflateFromResource(PreferenceManager.java:216)
at androidx.preference.PreferenceFragmentCompat.setPreferencesFromResource(PreferenceFragmentCompat.java:377)
at de.fabipfolix.vertretungsplan.SettingsActivity$SettingsFragment.onCreatePreferences(SettingsActivity.java:42)
at androidx.preference.PreferenceFragmentCompat.onCreate(PreferenceFragmentCompat.java:160)
at androidx.fragment.app.Fragment.performCreate(Fragment.java:2586)
at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManagerImpl.java:838)
at androidx.fragment.app.FragmentTransition.addToFirstInLastOut(FragmentTransition.java:1197)
at androidx.fragment.app.FragmentTransition.calculateFragments(FragmentTransition.java:1080)
at androidx.fragment.app.FragmentTransition.startTransitions(FragmentTransition.java:119)
at androidx.fragment.app.FragmentManagerImpl.executeOpsTogether(FragmentManagerImpl.java:1866)
at androidx.fragment.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManagerImpl.java:1824)
at androidx.fragment.app.FragmentManagerImpl.execPendingActions(FragmentManagerImpl.java:1727)
at androidx.fragment.app.FragmentManagerImpl.dispatchStateChange(FragmentManagerImpl.java:2663)
at androidx.fragment.app.FragmentManagerImpl.dispatchActivityCreated(FragmentManagerImpl.java:2613)
at androidx.fragment.app.FragmentController.dispatchActivityCreated(FragmentController.java:246)
at androidx.fragment.app.FragmentActivity.onStart(FragmentActivity.java:542)
at androidx.appcompat.app.AppCompatActivity.onStart(AppCompatActivity.java:201)
at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1425)
at android.app.Activity.performStart(Activity.java:7825)
at android.app.ActivityThread.handleStartActivity(ActivityThread.java:3294)
at android.app.servertransaction.TransactionExecutor.performLifecycleSequence(TransactionExecutor.java:221)
at android.app.servertransaction.TransactionExecutor.cycleToPath(TransactionExecutor.java:201)
at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:173)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:97)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2016)
at android.os.Handler.dispatchMessage(Handler.java:107)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7356)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
我已经评论了我今天所做的一切,但我不知道问题是什么。XML 文件的设计窗口显示我必须输入一个 boolean 值。有谁知道如何解决这个问题吗?
这是我的文件:
root_preferences.xml:
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<PreferenceCategory app:title="Login Daten">
<EditTextPreference
android:ems="10"
android:inputType="text"
android:key="pref_username"
android:title="BenutzernameEditText"
app:title="Benutzername"
app:useSimpleSummaryProvider="true" />
<EditTextPreference
android:dialogTitle="Passwort"
android:inputType="text"
android:key="pref_password"
android:title="Passwort" />
</PreferenceCategory>
<PreferenceCategory app:title="Benachrichtigungen">
<SwitchPreference
android:defaultValue="true"
android:key="switchNotifications"
android:summary="@string/summarySwitchNotifications"
android:title="NotificationSwitch" />
</PreferenceCategory>
<PreferenceCategory app:title="Hintergrundaktivität">
</PreferenceCategory>
<PreferenceCategory app:title="Oberstufe">
<SwitchPreference
android:contentDescription="Kursbezeichnungen mit Komma trennen"
android:defaultValue="false"
android:key="switchKurse"
android:title="Kurse filtern" />
<EditTextPreference
android:dialogMessage="Kursnamen mit Komma trennen "
android:key="pref_kurse"
android:summary="Kursnamen mit Komma trennen "
android:title="Kursbezeichnungen"
android:inputType="text"
app:dialogTitle="Kursbezeichnungen" />
</PreferenceCategory>
主要 Activity :
public class MainActivity extends AppCompatActivity {
FloatingActionButton fabRefresh;
RecyclerView recyclerView;
RecyclerView.Adapter adapter;
RecyclerView.LayoutManager layoutManager;
ArrayList<Vertretungsstunde> vertretungen;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
SharedPreferences sharedPref =PreferenceManager.getDefaultSharedPreferences(this);
Boolean notifications = sharedPref.getBoolean(SettingsActivity.KEY_PREF_NOTIFICATIONS_SWITCH, false);
String username = sharedPref.getString(SettingsActivity.KEY_PREF_USERNAME_TEXT, "");
ArrayList<Vertretungsstunde> list = ...;
//RECYCLERVIEW
recyclerView = findViewById(R.id.rv_VertretungenHeute);
recyclerView.setHasFixedSize(false);
layoutManager = new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false);
recyclerView.setLayoutManager(layoutManager);
((SimpleItemAnimator) recyclerView.getItemAnimator()).setSupportsChangeAnimations(false);
adapter = new VertretungsAdapter(this, list);
recyclerView.setAdapter(adapter);
//TOOLBAR
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
//REFRESH BUTTON
fabRefresh = findViewById(R.id.fabRefresh);
fabRefresh.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) { //FABRefresh OnClickListener
Toast.makeText(MainActivity.this, "Refreshing...", Toast.LENGTH_SHORT).show();
//...
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
Intent intent = new Intent(MainActivity.this, de.fabipfolix.vertretungsplan.SettingsActivity.class);
startActivity(intent);
return true;
}
return super.onOptionsItemSelected(item);
}
}
设置 Activity :
public class SettingsActivity extends AppCompatActivity {
public static final String KEY_PREF_NOTIFICATIONS_SWITCH = "switchNotifications";
public static final String KEY_PREF_FILTER_SWITCH = "switchKurse";
public static final String KEY_PREF_KURSE_TEXT ="pref_kurse";
public static final String KEY_PREF_PASSWORD_TEXT = "pref_password";
public static final String KEY_PREF_USERNAME_TEXT = "pref_username";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.settings_activity);
getSupportFragmentManager()
.beginTransaction()
.replace(R.id.settings, new SettingsFragment())
.commit();
ActionBar actionBar = getSupportActionBar();
if (actionBar != null) {
actionBar.setDisplayHomeAsUpEnabled(true);
}
}
public static class SettingsFragment extends PreferenceFragmentCompat {
@Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
setPreferencesFromResource(R.xml.root_preferences, rootKey);
}
}
}
最佳答案
根据评论:
您之前保存的数据可能会破坏当前的实现。如果是这种情况,清洁存储应该可以做到
关于java - EditTextPreference 不适用于字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60019607/
如何使用 SPListCollection.Add(String, String, String, String, Int32, String, SPListTemplate.QuickLaunchO
我刚刚开始使用 C++ 并且对 C# 有一些经验,所以我有一些一般的编程经验。然而,似乎我马上就被击落了。我试过在谷歌上寻找,以免浪费任何人的时间,但没有结果。 int main(int argc,
这个问题已经有答案了: In Java 8 how do I transform a Map to another Map using a lambda? (8 个回答) Convert a Map>
我正在使用 node + typescript 和集成的 swagger 进行 API 调用。我 Swagger 提出以下要求 http://localhost:3033/employees/sear
我是 C++ 容器模板的新手。我收集了一些记录。每条记录都有一个唯一的名称,以及一个字段/值对列表。将按名称访问记录。字段/值对的顺序很重要。因此我设计如下: typedef string
我需要这两种方法,但j2me没有,我找到了一个replaceall();但这是 replaceall(string,string,string); 第二个方法是SringBuffer但在j2me中它没
If string is an alias of String in the .net framework为什么会发生这种情况,我应该如何解释它: type JustAString = string
我有两个列表(或字符串):一个大,另一个小。 我想检查较大的(A)是否包含小的(B)。 我的期望如下: 案例 1. B 是 A 的子集 A = [1,2,3] B = [1,2] contains(A
我有一个似乎无法解决的小问题。 这里...我有一个像这样创建的输入... var input = $(''); 如果我这样做......一切都很好 $(this).append(input); 如果我
我有以下代码片段 string[] lines = objects.Split(new string[] { "\r\n", "\n" }, StringSplitOptions.No
这可能真的很简单,但我已经坚持了一段时间了。 我正在尝试输出一个字符串,然后输出一个带有两位小数的 double ,后跟另一个字符串,这是我的代码。 System.out.printf("成本:%.2
以下是 Cloud Firestore 列表查询中的示例之一 citiesRef.where("state", ">=", "CA").where("state", "= 字符串,我们在Stack O
我正在尝试检查一个字符串是否包含在另一个字符串中。后面的代码非常简单。我怎样才能在 jquery 中做到这一点? function deleteRow(locName, locID) { if
这个问题在这里已经有了答案: How to implement big int in C++ (14 个答案) 关闭 9 年前。 我有 2 个字符串,都只包含数字。这些数字大于 uint64_t 的
我有一个带有自定义转换器的 Dozer 映射: com.xyz.Customer com.xyz.CustomerDAO customerName
这个问题在这里已经有了答案: How do I compare strings in Java? (23 个回答) 关闭 6 年前。 我想了解字符串池的工作原理以及一个字符串等于另一个字符串的规则是
我已阅读 this问题和其他一些问题。但它们与我的问题有些无关 对于 UILabel 如果你不指定 ? 或 ! 你会得到这样的错误: @IBOutlet property has non-option
这两种方法中哪一种在理论上更快,为什么? (指向字符串的指针必须是常量。) destination[count] 和 *destination++ 之间的确切区别是什么? destination[co
This question already has answers here: Closed 11 years ago. Possible Duplicates: Is String.Format a
我有一个Stream一个文件的,现在我想将相同的单词组合成 Map这很重要,这个词在 Stream 中出现的频率. 我知道我必须使用 collect(Collectors.groupingBy(..)
我是一名优秀的程序员,十分优秀!