java.lang.IllegalStateException : Could not execute method of the activity (Shared Preferences)

标签 java android

我正在尝试将值存储为应用程序的一些设置的共享首选项。但我现在已经走到了死胡同,我不知道为什么会出现这个错误,因为我现在正在进行 Java/Android 编码。

我知道这种情况发生在 SaveSettings 方法中,因为当我注释掉更新首选项并使用 toast 消息时,我没有收到任何错误。从“主要 Activity ”设置选项调用“设置 Activity ”。我已经搜索过,但找不到答案。

import android.app.Activity;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.widget.TextView;
public class Settings extends Activity {

final String PREFS_NAME = "SettingsFile";
public static final String WebAddress = "webAddressKey";
public static final String Frequency = "frequencyKey";

TextView webUri;
SharedPreferences settings;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.settings_screen);

    webUri = (TextView) findViewById(R.id.websiteUrl);
    SharedPreferences settings = getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE);

    // load spinner 
    Spinner spinner = (Spinner) findViewById(R.id.minutes);
    // Create an ArrayAdapter using the string array and a default spinner
    // layout
    ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
            this, R.array.minutes,
            android.R.layout.simple_spinner_dropdown_item);
    // Specify the layout to use when the list of choices appears
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    // Apply the adapter to the spinner
    spinner.setAdapter(adapter);

    //get stored values
    if (settings.contains(WebAddress)) {
        webUri.setText(settings.getString(WebAddress, ""));
        Log.e("log_tag", "Web Address Loaded");
    }
    //TO DO Retrieve Frequency
//      if (settings.contains(Frequency)) { 
//          spinner.setText(settings.getString(Frequency, ""));
//          Log.e("log_tag", "Web Address Loaded");
//      }

    getActionBar().setTitle("Settings");

}

public void saveSettings(View view) {

    String weburi = webUri.getText().toString();
    // Update Preferences
    //Toast.makeText(getApplicationContext(), "Web URI = " + weburi, Toast.LENGTH_LONG).show();
    Editor editor = settings.edit();
    editor.putString(WebAddress, weburi);
    editor.apply(); // commit the sharedPreferences.

}

}

下面是与之相关的 xml,请注意,一旦我让整个应用程序按我想要的方式工作,我将修复硬编码字符串。

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/settingsScroll"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="120dp" >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:text="Please enter your web site url as www.yoursitename.com, please don&apos;t enter the http:// prefix" />

    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/textView1"
        android:text="http://" />

    <EditText
        android:id="@+id/websiteUrl"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/textView2"
        android:layout_toRightOf="@+id/textView2"
        android:ems="10" />

    <Spinner
        android:id="@+id/minutes"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/websiteUrl"
        android:layout_below="@+id/textView3" />

    <TextView
        android:id="@+id/textView3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/textView2"
        android:text="Enter Frequency of Updates in Minutes" />

    <Button
        android:id="@+id/submit_botton"
        style="?android:attr/buttonStyleSmall"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/minutes"
        android:layout_below="@+id/minutes"
        android:onClick="saveSettings"
        android:text="Save Values" />

</RelativeLayout>

</ScrollView>

我得到的日志是:

01-10 11:12:01.791: E/AndroidRuntime(5491): FATAL EXCEPTION: main
01-10 11:12:01.791: E/AndroidRuntime(5491): Process: uk.co.diong.getonline, PID: 5491
01-10 11:12:01.791: E/AndroidRuntime(5491): java.lang.IllegalStateException: Could not execute method of the activity
01-10 11:12:01.791: E/AndroidRuntime(5491):     at android.view.View$1.onClick(View.java:3823)
01-10 11:12:01.791: E/AndroidRuntime(5491):     at android.view.View.performClick(View.java:4438)
01-10 11:12:01.791: E/AndroidRuntime(5491):     at android.view.View$PerformClick.run(View.java:18422)
01-10 11:12:01.791: E/AndroidRuntime(5491):     at android.os.Handler.handleCallback(Handler.java:733)
01-10 11:12:01.791: E/AndroidRuntime(5491):     at android.os.Handler.dispatchMessage(Handler.java:95)
01-10 11:12:01.791: E/AndroidRuntime(5491):     at android.os.Looper.loop(Looper.java:136)
01-10 11:12:01.791: E/AndroidRuntime(5491):     at android.app.ActivityThread.main(ActivityThread.java:5017)
01-10 11:12:01.791: E/AndroidRuntime(5491):     at java.lang.reflect.Method.invokeNative(Native Method)
01-10 11:12:01.791: E/AndroidRuntime(5491):     at java.lang.reflect.Method.invoke(Method.java:515)
01-10 11:12:01.791: E/AndroidRuntime(5491):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
01-10 11:12:01.791: E/AndroidRuntime(5491):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
01-10 11:12:01.791: E/AndroidRuntime(5491):     at dalvik.system.NativeStart.main(Native Method)
01-10 11:12:01.791: E/AndroidRuntime(5491): Caused by: java.lang.reflect.InvocationTargetException
01-10 11:12:01.791: E/AndroidRuntime(5491):     at java.lang.reflect.Method.invokeNative(Native Method)
01-10 11:12:01.791: E/AndroidRuntime(5491):     at java.lang.reflect.Method.invoke(Method.java:515)
01-10 11:12:01.791: E/AndroidRuntime(5491):     at android.view.View$1.onClick(View.java:3818)
01-10 11:12:01.791: E/AndroidRuntime(5491):     ... 11 more
01-10 11:12:01.791: E/AndroidRuntime(5491): Caused by: java.lang.NullPointerException
01-10 11:12:01.791: E/AndroidRuntime(5491):     at uk.co.diong.getonline.Settings.saveSettings(Settings.java:55)
01-10 11:12:01.791: E/AndroidRuntime(5491):     ... 14 more

我做错了什么?

最佳答案

onCreate中,您创建一个局部变量settings。您已经创建了一个类成员settings,所以您可能只是错过了这一点。

更改:

SharedPreferences settings = getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE);

settings = getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE);

关于java.lang.IllegalStateException : Could not execute method of the activity (Shared Preferences),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27878518/

相关文章:

android - Logcat 在 AVD 上显示信息 3 次

android - Android Gradle构建中的任务执行前该如何做?

android - 通过捏而不是 Activity 旋转 View 时 getX() 和 getY() 的错误值

java - ANTLR v4 的 mysql 语法文件中的语法错误

java - 非图求解器中的回溯似乎处于无限循环中

java - 如何使用另一个 JLabel 控制 Java Swing JLabel

android - 在 JNI 中使用像素数据创建新的位图?

java - 将 IPv6 转换为 long 并将 long 转换为 IPv6

java - Java 中逻辑的分组方式有保证吗?

android - 一个 Activity 两个不同的 Layouts 有自己的主题?