アプリ内の設定に取り組んでいます。ただし、設定を呼び出そうとすると、次のエラーが発生します。スライドメニューとABSを使用しています。次のエラーから、設定が適切に呼び出されるのを妨げているように見えます。このログから、クラッシュの原因を特定できる人はいますか?
05-07 15:22:36.792: W/dalvikvm(5650): threadid=1: thread exiting with uncaught exception (group=0x40a71930)
05-07 15:22:36.822: E/AndroidRuntime(5650): FATAL EXCEPTION: main
05-07 15:22:36.822: E/AndroidRuntime(5650): java.lang.NullPointerException
05-07 15:22:36.822: E/AndroidRuntime(5650): at com.projectcaruso.naturalfamilyplaning.FragmentChange.showUserSettings(FragmentChange.java:130)
05-07 15:22:36.822: E/AndroidRuntime(5650): at com.projectcaruso.naturalfamilyplaning.FragmentChange.onOptionsItemSelected(FragmentChange.java:100)
05-07 15:22:36.822: E/AndroidRuntime(5650): at android.support.v4.app.Watson.onMenuItemSelected(Watson.java:118)
05-07 15:22:36.822: E/AndroidRuntime(5650): at com.actionbarsherlock.ActionBarSherlock.callbackOptionsItemSelected(ActionBarSherlock.java:603)
05-07 15:22:36.822: E/AndroidRuntime(5650): at com.actionbarsherlock.internal.ActionBarSherlockNative.dispatchOptionsItemSelected(ActionBarSherlockNative.java:93)
05-07 15:22:36.822: E/AndroidRuntime(5650): at com.actionbarsherlock.app.SherlockFragmentActivity.onMenuItemSelected(SherlockFragmentActivity.java:205)
05-07 15:22:36.822: E/AndroidRuntime(5650): at com.android.internal.policy.impl.PhoneWindow.onMenuItemSelected(PhoneWindow.java:980)
05-07 15:22:36.822: E/AndroidRuntime(5650): at com.android.internal.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:735)
05-07 15:22:36.822: E/AndroidRuntime(5650): at com.android.internal.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:149)
05-07 15:22:36.822: E/AndroidRuntime(5650): at com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:874)
05-07 15:22:36.822: E/AndroidRuntime(5650): at com.android.internal.view.menu.ListMenuPresenter.onItemClick(ListMenuPresenter.java:166)
05-07 15:22:36.822: E/AndroidRuntime(5650): at android.widget.AdapterView.performItemClick(AdapterView.java:298)
05-07 15:22:36.822: E/AndroidRuntime(5650): at android.widget.AbsListView.performItemClick(AbsListView.java:1100)
05-07 15:22:36.822: E/AndroidRuntime(5650): at android.widget.AbsListView$PerformClick.run(AbsListView.java:2749)
05-07 15:22:36.822: E/AndroidRuntime(5650): at android.widget.AbsListView$1.run(AbsListView.java:3423)
05-07 15:22:36.822: E/AndroidRuntime(5650): at android.os.Handler.handleCallback(Handler.java:725)
05-07 15:22:36.822: E/AndroidRuntime(5650): at android.os.Handler.dispatchMessage(Handler.java:92)
05-07 15:22:36.822: E/AndroidRuntime(5650): at android.os.Looper.loop(Looper.java:137)
05-07 15:22:36.822: E/AndroidRuntime(5650): at android.app.ActivityThread.main(ActivityThread.java:5041)
05-07 15:22:36.822: E/AndroidRuntime(5650): at java.lang.reflect.Method.invokeNative(Native Method)
05-07 15:22:36.822: E/AndroidRuntime(5650): at java.lang.reflect.Method.invoke(Method.java:511)
05-07 15:22:36.822: E/AndroidRuntime(5650): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
05-07 15:22:36.822: E/AndroidRuntime(5650): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
05-07 15:22:36.822: E/AndroidRuntime(5650): at dalvik.system.NativeStart.main(Native Method)
これが私のJavaです:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.projectcaruso:
Util.goToGitHub(this);
return true;
case R.id.about:
new AlertDialog.Builder(this)
.setTitle(R.string.about)
.setMessage(Html.fromHtml(getString(R.string.about_msg)))
.show();
break;
case R.id.licenses:
new AlertDialog.Builder(this)
.setTitle(R.string.licenses)
.setMessage(Html.fromHtml(getString(R.string.license_detail)))
.show();
break;
case R.id.contact:
final Intent email = new Intent(android.content.Intent.ACTION_SENDTO);
String uriText = "mailto:jfeinstein10@gmail.com" +
"?subject=" + URLEncoder.encode("SlidingMenu Demos Feedback");
email.setData(Uri.parse(uriText));
try {
startActivity(email);
} catch (Exception e) {
Toast.makeText(this, R.string.no_email, Toast.LENGTH_SHORT).show();
}
break;
case R.id.settings:
showUserSettings();
break;
}
return super.onOptionsItemSelected(item);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getSupportMenuInflater().inflate(R.menu.settings, menu);
return true;
}
private void showUserSettings() {
SharedPreferences sharedPrefs = PreferenceManager
.getDefaultSharedPreferences(this);
StringBuilder builder = new StringBuilder();
builder.append("\n Username: "
+ sharedPrefs.getString("prefUsername", "NULL"));
builder.append("\n Send report:"
+ sharedPrefs.getBoolean("prefSendReport", false));
builder.append("\n Sync Frequency: "
+ sharedPrefs.getString("prefSyncFrequency", "NULL"));
TextView settingsTextView = (TextView) findViewById(R.id.textUserSettings);
settingsTextView.setText(builder.toString());
}
XML を編集:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/projectcaruso"
android:icon="@drawable/ic_action_github"
android:showAsAction="always"
android:title="@string/projectcaruso_label"
android:titleCondensed="@string/projectcaruso"
android:visible="true">
</item>
<item
android:id="@+id/about"
android:title="@string/about"
android:showAsAction="never"
android:orderInCategory="1">
</item>
<item
android:id="@+id/licenses"
android:title="@string/licenses"
android:showAsAction="never"
android:orderInCategory="2">
</item>
<item
android:id="@+id/contact"
android:title="@string/contact"
android:orderInCategory="3"
android:showAsAction="never">
</item>
<item
android:id="@+id/settings"
android:title="@string/settings"
android:orderInCategory="3"
android:showAsAction="never">
</item>
</menu>