如何在2个活动中共享2个变量

时间:2017-09-24 17:20:14

标签: java android

 public void select(View v) {
        ImageButton imageButton = (ImageButton) v;
        //startActivity(new Intent(getApplicationContext(), level1_game.class));
        startActivity(new Intent(getApplicationContext(), charicter.class));
    }

    public void loadout(View v) {
        Button Button = (Button) v;
        coinvar = coinvar +1;
        TextView mTextView = (TextView) findViewById(R.id.coin1);
        mTextView.setText(Integer.toString(coinvar));
        //startActivity(new Intent(getApplicationContext(), charicter.class));
    }
}

现在,当我切换活动时,我试图显示相同的数字,但它似乎不起作用,我得到一个错误java.lang.NullPointerException:尝试调用虚方法'android.content.Context android.content.Context .getApplicationContext()'在空对象引用

这是我要改变的其他活动。

 int mcoin = ((level) getApplicationContext()).coinvar;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_charicter);
    TextView mTextView = (TextView) findViewById(R.id.coin2);
    mTextView.setText(Integer.toString(mcoin));

有没有办法简单易行。

3 个答案:

答案 0 :(得分:1)

我想您只是尝试将int变量发送到第二个活动而不执行任何其他操作。对于这个问题,我建议通过Intent发送它:

在第一项活动中:

startActivity(new Intent(getApplicationContext(), charicter.class).putExtra("coins",coinvar));

在第二项活动中:

private coinvar;
protected void onCreate(Bundle savedInstanceState) {
...
coinvar=getIntent().getIntExtra("coins",coinvar);

请注意,它会导致单向数据共享。

答案 1 :(得分:0)

创建一个类并在其中定义两个静态值。

public class SharedValue {
   public static int value1;
   public static int value2;
}

然后,在每个活动中,您可以使用SharedValue.value1来设置和获取值。

您也可以在没有静态字段的情况下执行此操作,只需将此字段放在Application类中即可。如果您没有应用程序类,则可以通过继承Application来定义它,然后您必须转到清单文件并更新应用程序名称。与活动不同,应用程序打开时应用程序将处于活动状态,您的数据不会丢失。

答案 2 :(得分:0)

可以从任何地方访问任何公共静态对象,您可以将它们存储在任何您想要的位置,可能是活动,服务等。 但我建议您将它们存储在自定义Application类中,因为它始终在运行。如果将共享值存储在Activity中,则必须处理内存泄漏。

如果你这样做

public class MyApp extends Application{
    public static int sharedValue1;
    public static int sharedValue2;
}

然后你可以使用MyApp.sharedValue1访问那些,或者如果你想为你可以做的getter实现一些逻辑:

getApplicationContext().getSharedValue1();

如果你不能调用getApplicationContext(),那么在MyApp中创建一个方法:

public static Context getAppContext(){
    return this;
}

然后 MyApp.getAppContext().getSharedValue1();