Android 广播接收机不';无法读取共享首选项中的当前值

Android 广播接收机不';无法读取共享首选项中的当前值,android,broadcastreceiver,sharedpreferences,Android,Broadcastreceiver,Sharedpreferences,我有一个带有编辑文本首选项的设置活动,它在共享首选项中保存一个作为IP地址的字符串,然后我有一个广播接收器,其中AsyncTask调用服务。我想创建可自定义的url地址,但当我拨打电话时,ip地址的当前值不会被占用,但当我重新启动应用程序时,ip地址的当前值会被占用。我怎样才能解决这个问题。我只粘贴有用的代码。 提前谢谢 public class Broadcast extends BroadcastReceiver { @Override public void onReceive(fin

我有一个带有编辑文本首选项的设置活动,它在共享首选项中保存一个作为IP地址的字符串,然后我有一个广播接收器,其中AsyncTask调用服务。我想创建可自定义的url地址,但当我拨打电话时,ip地址的当前值不会被占用,但当我重新启动应用程序时,ip地址的当前值会被占用。我怎样才能解决这个问题。我只粘贴有用的代码。 提前谢谢

public class Broadcast extends BroadcastReceiver {


@Override
public void onReceive(final Context context, Intent intent) {

    preferences = PreferenceManager.getDefaultSharedPreferences(context);

        new Call().execute();

}



private class Call extends AsyncTask<String, String, String> {

    String ip;

    @Override
    protected String doInBackground(String... params) {

            ip = preferences.getString("key","");


        String result = RestFullConnection.postCall("http://" + ip + ":8080/app/api/bla/sync", params[0]);
        return result;

    }

}

请在onReceive中尝试此功能

preferenze = context.getSharedPreferences(PERFERENCE_NAME,
            Context.MODE_PRIVATE);

希望它能帮助您。

这取决于您如何保存共享引用。使用
apply()
方法将异步存储该值,从而不会阻塞当前线程<另一方面,代码>提交()会立即保存该值。这在您的情况下可能是一个问题(请在保存SharedReference的位置提供您的代码)

小心,SharedReference不能在不同的进程中正常工作!如果您使用的是不同的流程,我建议您使用一些与之配套的机制(例如IPC、数据库等)


替代SharedReferences的另一个库是。它使用内容提供者/数据库,并且具有类似的语法。您甚至可以从SharedReferences导入现有数据。

何时何地触发广播?然后将代码发布到保存ip的位置。我编辑我的问题。正如我在问题中所写的,我不会以编程方式保存值,而是使用一个组件(edittextpreference)来为我保存值。它仍然存在声明的问题-iirc
edittextpreference
使用
apply()
。现在我们已经了解了问题,哪种可能是解决方案?不要使用EditTextPreference。
preferenze = context.getSharedPreferences(PERFERENCE_NAME,
            Context.MODE_PRIVATE);