当前位置: 首页 > 知识库问答 >
问题:

使用SharedReferences将变量从接收方传递到活动

林富
2023-03-14

我使用Sharedprefs将一个变量从接收者传递到活动。它似乎是正确的,如果我关闭并重新启动应用程序,我可以看到接收器已写入Sharedprefs和活动可以读取最后写入的值。但当应用程序运行时,变量不会更改。它不会从接收器获取值。

这是我的代码从接收器:

 if (PluginBundleManager.isBundleValid(bundle))
        {
            final String message = bundle.getString(PluginBundleManager.BUNDLE_EXTRA_STRING_MESSAGE);
            SharedPreferences sharedPref = context.getSharedPreferences("MyPrefsFile", Context.MODE_PRIVATE);
            sharedPref.edit().putString("scrltxt", message).apply();
                Toast.makeText(context, message , Toast.LENGTH_LONG).show();
        }

这是活动的代码:

public void onResume(){
    super.onResume();
    this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

    final String MY_PREFS_NAME = "MyPrefsFile";
    SharedPreferences sharedPreferencesx = getApplicationContext().getSharedPreferences(MY_PREFS_NAME, Context.MODE_PRIVATE);
    scrltxt = sharedPreferencesx.getString("scrltxt", "");

        Toast.makeText(getApplicationContext(), scrltxt, Toast.LENGTH_LONG).show();

        mEdit   = (EditText)findViewById(R.id.EditText01);
    mEdit.setText(scrltxt);

那怎么了?为什么接收器不能在应用程序关闭前写入?

顺便说一句,我还在同一个应用程序中的一个单独的服务上读取这个共享的prefs文件。

共有1个答案

宗冷勋
2023-03-14

应用程序不更新,因为当广播接收到消息时不会调用onResume方法,这是正常的。我认为您使用的是不同的类,因此需要一个接口。在广播的类中定义接口:

public class MyTestReceiver extends BroadcastReceiver 
{
Sender sender;
@Override
public void onReceive(Context context, Intent intent) 
{
  if(intent.getAction()=="YourAction")
  {
  sender = (MyActivity) context;
  sender.messageReceived();
  }
}
public interface Sender
{
     void messageReceived();
}

}

然后在你的活动中实现它:

MyActivity extends AppCompactActivity implements Sender
{
//other methods

@Override
public void messageReceived()
{
    // set the text
}

}

这样,当广播接收到意图时,您可以立即更新文本。

 类似资料:
  • 我目前正在制作一个android应用程序,我想在activity和fragment之间传递一个日期。我的活动有一个按钮,打开片段:DatePickerFragment。 在我的活动中,我显示了一个日期,我想用片段修改它。因此,我想将日期传递给datepicker,并将其发送回活动。 我已经尝试了很多解决方案,但都没有奏效。简单的方法是传递一个参数,但这不能用片段来完成。

  • 问题内容: 我想根据例如从jenkins传递的变量来运行测试用例,请选择要运行的测试用例:testcaseOne,testcaseTwo 在pom.xml(maven)中: 我有两个testng @test方法: 还有我的testng.xml文件: 如何根据我要运行的测试数量和数量来传递此参数?也许有完全不同的方式来做到这一点? 问题答案: 您可以在testng.xml文件http://testn

  • 问题内容: 我看过类似的论坛,但无法获得任何有效的解决方案。我正在尝试将变量从Flask传递到我的JavaScript文件。这些值将用于我的JavaScript文件中的PubNub。 这是我的Python代码的一部分: 这是我的JavaScript代码(app.js)的一部分: 如果我在Settings.html文件中使用了此代码,而在app.js文件中却没有使用,则此代码有效。 问题答案: 该m

  • 问题内容: 我正在使用Google Maps制作可以加载数据库中包含经纬度数据的标记的地图。我希望用户可以通过单击按钮来加载三个不同的“图层”。单击该按钮时,将在服务器上执行php函数,从而根据数据库中的信息创建xml文件。然后调用AJAX函数提取此xml数据,然后将其用于创建地图标记。没有为每个“层”使用单独的PHP函数(除了SQL查询所在的行,这是相同的东西),有没有办法将AJAX中的java

  • 问题内容: 我似乎无法从php中将变量传递给我的bash脚本。无论我如何尝试,$ uaddress和$ upassword都变为空。 *_ __ _ __ __ * __ __ bash * __ __ * * ** *_ __ _ __ * PHP __ * __ __ * __ ** *_ __ _ _ _输出和调试 _ _ _ * *_ 问题答案: 您需要将变量作为参数传递给Shell脚本,

  • 问题内容: 我正在尝试将变量从node.js传递到我的HTML文件。 问题答案: 我发现我可以传递这样的变量