Android 将数据从活动发送到另一个活动而不启动它

Android 将数据从活动发送到另一个活动而不启动它,android,android-intent,android-activity,bundle,Android,Android Intent,Android Activity,Bundle,如果我有两个活动Activity1和Activity2,并且我希望在不启动Activity2的情况下将数据从Activity1发送到Activity2 我知道如果我想启动Activity2,我会在Activity1.java中使用这段代码 Intent intent ; Bundle bundle = new Bundle(); bundle.putString(BG_SELECT, hexColor); intent = new Intent(getApplicationContext()

如果我有两个活动Activity1和Activity2,并且我希望在不启动Activity2的情况下将数据从Activity1发送到Activity2

我知道如果我想启动Activity2,我会在Activity1.java中使用这段代码

Intent intent ;
Bundle bundle = new Bundle();

bundle.putString(BG_SELECT, hexColor);

intent = new Intent(getApplicationContext(), Activity2.class);

intent.putExtras(bundle);

// this is to start but I want just refresh Activity2 not start it
startActivityForResult(intent, uniqueNo);
在Activity2.java中

bundle = getIntent().getExtras();

if (bundle != null) {
   bgColor = bundle.getString(SebhaActivity.BG_SELECT);
   System.out.println("in Activity2, selected BG: "+bgColor);

}
如何在不启动Activity2的情况下刷新Activity2以查找其中的数据? 提前感谢。

如果下一个活动(您需要数据的地方,即Activity2)无法从这里开始,您可以将数据保存在活动1的SharedReferences中,并在到达那里时在Activity2中访问它

创建一个非活动类

  public class Datas {
  public static String name;
  }
Data  mData = new Data();
String str = mData.name
在活动类中声明此非活动类

  public class Datas {
  public static String name;
  }
Data  mData = new Data();
String str = mData.name

如果要在两个活动同时运行时在两个活动之间共享数据,则应使用一些可供两个活动使用的存储

检查
共享首选项
,或创建一个可在这两个活动中访问的全局存储类。没有真正的“方法”可以做到这一点。

您可以使用。对于您的场景,即Activity1向Activity2发送某些内容,您可以执行以下操作

# Activity1

Intent intent = new Intent("INTENT_NAME").putExtra(BG_SELECT, hexColor);
LocalBroadcastManager.getInstance(Activity1.this).sendBroadcast(intent);
在Activity2上,您需要首先在其onCreate方法上注册receiver,然后使用BroadcastReceiver获得意图,如下所示

# Activity2

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    LocalBroadcastManager.getInstance(this).registerReceiver(mReceiver, new IntentFilter("INTENT_NAME"));
}
然后,注册
mReceiver
以检索
BG\u SELECT
字段

# Activity2

private BroadcastReceiver mReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        String receivedHexColor = intent.getStringExtra(BG_SELECT);
    }
};

我认为,在这里,共享的参考是无与伦比的

SharedReferences是特定于应用程序的,即数据在 执行以下选项之一:PREFS_NAME是 文件模式是操作模式。commit()用于 保存对共享首选项的更改

您的代码如下所示

在共享数据的第一个活动中

  SharedPreferences preferences=getSharedPreferences("PhoneBook",MODE_PRIVATE);
    SharedPreferences.Editor editor=preferences.edit();

    editor.putInt("registration_id",c.getInt(c.getColumnIndex("db_regiser_id")));
    editor.putBoolean("IsLogin",true);
    editor.commit();
在第二个活动中,获取如下数据

SharedPreferences preferences=getSharedPreferences("PhoneBook",MODE_PRIVATE);
 int registration_id = preferences.getInt("registration_id", 0);
使用SharedReference是非常安全的

同时访问


希望这一条会有帮助。

我认为这个问题的反对票是不必要的。即使这些活动被O.P.误解,许多Android初学者仍然会问这个问题,一个好的答案会引导他们前进。但这还不够安全