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));
有没有办法简单易行。
答案 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();