java - getDefaultSharedPreferences 和 IntentService 崩溃

标签 java android crash preferences intentservice

我正在尝试运行它,但是当它到达 getDefaultSharedPreferences() 时它崩溃了。 为什么?

这是首选项 Activity 。它在被销毁时触发 IntentService

import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
import android.os.Bundle;
import android.preference.EditTextPreference;
import android.preference.PreferenceActivity;
import android.preference.PreferenceManager;

public class CCTDetectorActivity extends PreferenceActivity implements
        OnSharedPreferenceChangeListener {

    private SharedPreferences settings;
    static public String nameOfFile = "name_of_file";
    static public String nameOfFileDefaultValue = "detected_f.xml";
    static public String portNumber = "port_number";
    static public String portNumberDefaultValue = "25015";
    static public String keepAlive = "keep_alive";
    static public String keepAliveDefaultValue = "3";
    static public String nameOfSettings = "settings";

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.layout.cct_detector_preferences_ui);
        settings = PreferenceManager.getDefaultSharedPreferences(this);
        settings.registerOnSharedPreferenceChangeListener(this);
        updateViews();
    }

    @Override
    protected void onDestroy() {
        Intent intent = new Intent(getBaseContext(), CCTDetectorService.class);
        startService(intent);
        super.onDestroy();
    }

    private void updateViews() {
        setSummeryfromPreferencesView(nameOfFile, nameOfFileDefaultValue);
        setSummeryfromPreferencesView(portNumber, portNumberDefaultValue);
        setSummeryfromPreferencesView(keepAlive, keepAliveDefaultValue);
    }

    private void setSummeryfromPreferencesView(String viewName, String DefValue) {
        String value = settings.getString(viewName, DefValue);
        EditTextPreference editTextView = (EditTextPreference) findPreference(viewName);
        editTextView.setText(value);
        editTextView.setSummary(value);
    }

    public void onSharedPreferenceChanged(SharedPreferences arg0, String arg1) {
        updateViews();
    }
}

这是崩溃的 IntentService。 崩溃的行标记为:“这里崩溃了!”

import android.app.IntentService;
import android.content.Intent;
import android.content.SharedPreferences;
import android.preference.PreferenceManager;
import android.util.Log;

public class CCTDetectorService extends IntentService {

    private File serializedXmlFile;
    private DatagramSocket udpSocket;
    private boolean m_Listening = true;
    private ActiveCCTs activeCCTs = new ActiveCCTs();
    private SharedPreferences preferences;
    private Serializer serializer = new Persister();

    public CCTDetectorService() throws SocketException {
        super("CCTDetectorServiceThread");
        int port;
        String FILENAME;
        // here it crashes!
        preferences = PreferenceManager.getDefaultSharedPreferences(this);
        port = getIntFromSettingsEditText(CCTDetectorActivity.portNumber,
                CCTDetectorActivity.portNumberDefaultValue);
        activeCCTs.keepAlive = getIntFromSettingsEditText(
                CCTDetectorActivity.keepAlive,
                CCTDetectorActivity.keepAliveDefaultValue);
        FILENAME = preferences.getString(CCTDetectorActivity.nameOfFile,
                CCTDetectorActivity.nameOfFileDefaultValue);
        serializedXmlFile = new File(FILENAME);
        udpSocket = new DatagramSocket(port);
        udpSocket.setBroadcast(true);
    }
}

最佳答案

您在服务的构造函数中做了很多事情。

不要那样做。覆盖 #onCreate() 并在那里进行设置。记得调用 super.onCreate()

关于java - getDefaultSharedPreferences 和 IntentService 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8835653/

相关文章:

android - 从共享首选项中的集合中删除特定项目

c++ - C/C++ 字符指针崩溃

TCP 发送不返回导致进程崩溃

java - 如何重新附加到现有的 Java EE session

java - spring事务如何在包含3个dao方法调用的服务方法中创建

android - Android 中 System.out.print 的替代方案

java - 从非 Activity 类访问 Activity 组件

android - 如何从Android设备查找崩溃报告?

java - 如何设置 IntelliJ 13 以在 Play Framework 项目中编译 junit 测试

java - 将网络元素的大小转换为整数变量时遇到问题